English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье приведен пример, который总结了 операции с базой данных в 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 (при отправке письма замените # на @) для подачи жалоб и предоставления соответствующих доказательств. Если будет подтверждено, что это содержимое является подозрительным, этот сайт немедленно удалил подозреваемое侵权内容.