English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Обзор навыков работы с базой данных в Zend Framework

В этой статье приведен пример, который总结了 операции с базой данных в Zend Framework. Предлагается к рассмотрению, подробности см.:

знания базы данных Zend_Db

пример:

файл модели:

$this->fetchAll("is_jian=1","id DESC",0,2)->toArray();
// По is_jian=1, сортировка по id в обратном порядке, получение первых 2 записей. Если первый параметр null, то прямая сортировка по id в обратном порядке ASC - это прямая сортировка.

файл маршрутизации:

$video = new Video(); // Создание экземпляра класса базы данных
$this->view->get2Video = $video->get2Video(); // Получение 2 рекомендованных данных на главной странице

файл index.phtml:

<?php foreach ($this->get2Video as $video): ?>
<?=$video['id']; ?>
<?=$video['name']; ?>
<? endforeach; ?>

Добавьте кавычки, чтобы предотвратить атаку на базу данных

Использование quote

$value = $db->quote('St John"s Wort');
// $value теперь '"St John\"s Wort"' (обратите внимание на кавычки с обеих сторон)
// Добавьте к массиву кавычки
$value = $db->quote(array('a', 'b', 'c'));
// $value теперь '"a", "b", "c"' (разделенный запятыми строками)

Использование quoteInto

echo $where = $db->quoteInto('id = ?', 1);
// $where теперь 'id = "1"' (обратите внимание на кавычки с обеих сторон)
// В where-выражении добавьте к массиву кавычки
$where = $db->quoteInto('id IN(?)', array(1, 2, 3));
// $where теперь 'id IN("1", "2", "3")' (строка, разделенная запятыми)

(1) Обобщение запроса данных

Прямо выполняйте запрос.    (Используйте полный sql-запрос)

//function quoteInto($text, $value, $type = null, $count = null)
$db = $this->getAdapter();
$sql = $db->quoteInto('SELECT * FROM `m_video` WHERE `is_guo` =?', '1');
$result = $db->query($sql);
// Используйте объект PDOStatement $result, чтобы поместить все данные результатов в один массив
$videoArray = $result->fetchAll();

Использование fetchAll

fetchAll($where = null, $order = null, $count = null, $offset = null)

Получите значения всех полей в результирующем наборе, верните их в виде последовательного массива, если параметр не задан, пишите null

Можете получить заданное количество результатов

$videoArray = $this->fetchAll("is_jian=1 and is_guo=1","id DESC",0,2)->toArray();

Использование fetchAssoc

fetchAssoc($sql, $bind = array())

Возвратить значения всех полей результатного набора, как связанный массив, первый полюс как код

$db = $this->getAdapter();
$videoArray=$db->fetchAssoc("SELECT * FROM m_video WHERE `is_jian` = :title",array('title' => '1'));

Использование fetchCol

fetchCol($sql, $bind = array())

Возвратить имя первого поля всех результатов

$db = $this->getAdapter();
$videoArray=$db->fetchCol("SELECT name FROM m_video WHERE `is_jian` = :title",array('title' => '1'));

Использование fetchOne

fetchOne($sql, $bind = array())

Возвратить только значение первого поля

$db = $this->getAdapter();
echo $videoArray=$db->fetchOne("SELECT count(*) FROM m_video WHERE `is_jian` = :title",array('title' => '1'));

Использование fetchPairs

fetchPairs($sql, $bind = array())

Возвратить один связанный массив, значение первого поля - код (id), значение второго поля - значение (name)

Возвратить: Array( [1] => Двенадцать знаков зодиака чудесный случай [2] => Фен-шуй любви),1,2: для поля id.

$db = $this->getAdapter();
$videoArray=$db->fetchPairs("SELECT id, name FROM m_video WHERE is_jian = :title",array('title' => '1'));

Использование fetchRow

fetchRow($where = null, $order = null)

Возвратить только первую строку результатного набора

$videoArray=$this->fetchRow("is_jian=1 and is_guo=1", 'id DESC')->toArray();

Использование query

//функция query($sql, $bind = array())
$db = $this->getAdapter();
$result = $db->query('SELECT * FROM `m_video`');
// $result = $db->query('SELECT * FROM `m_video` WHERE `name` = ? AND id = ?',array('Двенадцать знаков зодиака: Примечательная история', '1'));
// $result->setFetchMode(Zend_Db::FETCH_OBJ); // FETCH_OBJ по умолчанию, FETCH_NUM, FETCH_BOTH
// while ($row = $result->fetch()) {
// echo $row['name'];
//}
// $rows = $result->fetch();
// $rows = $result->fetchAll();
// $obj = $result->fetchObject(); // echo $obj->name;
// echo $Column = $result->fetchColumn(0); // Получить первый字段 результатов, например, 0 для id, используется для выбора одного поля
print_r($rows);

Использование select

$db = $this->getAdapter();
$select = $db->select();
$select->from('m_video', array('id','name','clicks'))
->where('is_guo = :is_guo and name = :name')
->order('name') // По какому полю сортировать, участвуют массив (несколько полей) или строка (одно поле)
->group() // Группировка
->having() // Условия для группировки данных
->distinct() // Без параметров, удаляет повторяющиеся значения. Иногда результаты совпадают с groupby
->limit(10);
// Чтение результатов с привязанными параметрами
$params = array('is_guo' => '1','name'=>'Двенадцать знаков зодиака: Примечательная история');
//$sql = $select->__toString(); // Получить запрос для отладки
$result = $db->fetchAll($select,$params);
Выполнение запроса select
$stmt = $db->query($select);
$result = $stmt->fetchAll();

或用

$stmt = $select->query();
$result = $stmt->fetchAll();

如果直接用

$db->fetchAll($select)

结果一样

多表联合查询用法

$db = $this->getAdapter();
$select = $db->select();
$select->from('m_video', array('id','name','pic','actor','type_id','up_time'))
->where('is_guo = :is_guo and is_jian = :is_jian')
->order('up_time')
->limit(2);
$params = array('is_guo' => '1','is_jian'=>'1');
$select->join('m_type', 'm_video.type_id = m_type.t_id', 'type_name');//多表联合查询
$videoArray = $db->fetchAll($select,$params);

find()方法,可以使用主键值在表中检索数据.

// SELECT * FROM round_table WHERE id = "1"
$row = $table->find(1);
// SELECT * FROM round_table WHERE id IN("1", "2", 3")
$rowset = $table->find(array(1, 2, 3));

(2)数据删除总结

第一种方法:可以删任意表

//quoteInto($text, $value, $type = null, $count = null)
$table = 'm_video';// 设定需要删除数据的表
$db = $this->getAdapter();
$where = $db->quoteInto('name = ?', 'ccc');// 删除数据的where条件语句
echo $rows_affected = $db->delete($table, $where);// 删除数据并得到影响的行数

第二种方法:只能删除本表中的

//delete用法
// delete($where)
$where = "name = 'bbb'";
echo $this->delete($where); // Удаление данных и получение количества строк, afected

(3) Обобщение обновления данных

Первый метод: можно обновлять данные в любой таблице

// Создание массива обновления данных в формате "имя_колонки"=>"данные", обновление строки данных
$table = 'm_video'; // таблица обновляемых данных
$db = $this->getAdapter();
$set = array (
'name' => '蝶影重重',
'clicks' => '888',
);
$where = $db->quoteInto('id = ?', '10'); // where-выражение
// Обновление данных таблицы, возвращающее количество обновленных строк
echo $rows_affected = $db->update($table, $set, $where);

Второй метод: можно обновлять только данные в этой таблице

$set = array (
'name' => '蝶影重重22',
'clicks' => '8880',
);
$db = $this->getAdapter();
$where = $db->quoteInto('id = ?', '10'); // where-выражение
$rows_affected = $this->update($set, $where); // Обновление данных таблицы, возвращающее количество обновленных строк

(4) Обобщение вставки данных

Первый метод: можно вставлять данные в любую таблицу

$table = 'm_gao'; // вставляемые данные таблицы
$db = $this->getAdapter();
// 以"列名"=>"数据"的格式构造插入数组,插入数据行
$row = array (
'title' => '大家好。111',
'content' => '影视网要改成用zend framework开发啊',
'time' => '2009-05-04 17:23:36',
);
// вставка строки данных и возврат количества вставленных строк
$rows_affected = $db->insert($table, $row);
// ID последнего вставленного данных
echo $last_insert_id = $db->lastInsertId();
$row = array(
'name' => 'curdate()',
'address' => new Zend_Db_Expr ('curdate()')
)

Таким образом, поле name будет вставлено строку curdate(), а address вставлен значения времени (результат curdate() 2009-05-09)

Второй метод: подходит только для таблицы, в которой еще не завершены

(5) Обработка транзакций

$table = 'm_gao'; // вставляемые данные таблицы
$db = $this->getAdapter();
$db->beginTransaction(); // Zend_Db_Adapter будет автоматически возвращаться в режим auto-commit, пока вы снова не вызовете метод beginTransaction()
// 以"列名"=>"数据"的格式构造插入数组,插入数据行
$row = array (
'id' => null,
'title' => '大家好。111',
'content' => '影视网要改成用zend framework开发啊',
'time' => '2009-05-04 17:23:36',
);
try {
// вставка строки данных и возврат количества вставленных строк
$rows_affected = $db->insert($table, $row);
// ID последнего вставленного данных
$last_insert_id = $db->lastInsertId();
$db->commit(); //提交事务
}catch (Exception $e){
$db->rollBack();
echo '捕获异常:'.$e->getMessage(); // выводит информацию об异常
}
echo $last_insert_id;

(6) другие

$db = $this->getAdapter();
$tables = $db->listTables(); // выводит все таблицы в текущей базе данных
$fields = $db->describeTable('m_video'); // выводит информацию о столбцах таблицы

Для тех, кто интересуется дополнительной информацией о zend, можно проверить темы на этом сайте: «Учебник по入门у в фреймворк Zend FrameWork», «Обзор лучших разработчиков фреймворков php», «Введение и полезные советы по фреймворку Yii», «Введение и полезные советы по ThinkPHP», «Введение в объектно-ориентированное программирование php» и «Введение в операцию с базами данных mysql для php» и «Обзор общих методов работы с базами данных php»

Надеюсь, что это руководство поможет вам в разработке PHP-приложений на основе фреймворка Zend.

Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему владельцу, контент был предоставлен пользователями Интернета по своей инициативе и загружен самостоятельно, этот сайт не обладает правами собственности, не underwent редактирование вручную и не несет ответственности за связанные с этим юридические последствия. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для подачи жалоб и предоставления соответствующих доказательств. Если будет подтверждено, что это содержимое является подозрительным, этот сайт немедленно удалил подозреваемое侵权内容.

Вам может понравиться