Maison >développement back-end >tutoriel php >Résumé des compétences opérationnelles de base de données Zend Framework
Cet article présente principalement les compétences d'exploitation de la base de données du Zend Framework. Il résume et analyse les fonctions courantes, les opérations courantes et les précautions associées pour les opérations de base de données sous forme d'exemples. Les amis dans le besoin peuvent se référer à cet article
. Des exemples résument les opérations de base de données Zend Framework. Partagez-le avec tout le monde pour votre référence, comme suit :
Connaissance de la base de données Zend_Db
Exemple :
Fichier modèle :
$this->fetchAll("is_jian=1","id DESC",0,2)->toArray(); //根据is_jian=1,按id倒序排列取前2条记录当第一个参数为null时,则直接按id倒序排列ASC为正序。
Fichier de routage :
$video=new Video();//实例化数据库类 $this->view->get2Video =$video->get2Video();//取到2条首页推荐的数据
fichier index.phtml :
<?php foreach ($this->get2Video as $video): ?> <?=$video['id']; ?> <?=$video['name']; ?> <? endforeach; ?>
Ajouter des guillemets pour empêcher les attaques de base de données
quote usage
$value = $db->quote('St John"s Wort'); // $value 现在变成了 '"St John\"s Wort"' (注意两边的引号) // 为数组加引号 $value = $db->quote(array('a', 'b', 'c')); // $value 现在变成了 '"a", "b", "c"' (","分隔的字符串)
quoteInto usage
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) Résumé de requête de données
Requête directe (Utilisez l'instruction SQL complète)
//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 utilisation
fetchAll($where = null, $order = null, $count = null, $offset = null)
Récupérez les valeurs de tous les champs de l'ensemble de résultats et renvoyez-les sous forme de tableau continu Si le paramètre n'est pas défini, écrivez-le comme null
Vous pouvez récupérer le. nombre spécifié d'entrées dans l'ensemble de résultats
$videoArray=$this->fetchAll("is_jian=1 and is_guo=1","id DESC",0,2)->toArray();
utilisation fetchAssoc
fetchAssoc($sql, $bind = array())
Récupérer les valeurs de tous les champs du ensemble de résultats et le renvoie sous forme de tableau associatif. Le premier champ est utilisé comme code
$db = $this->getAdapter(); $videoArray=$db->fetchAssoc("SELECT * FROM m_video WHERE `is_jian` = :title",array('title' => '1'));
utilisation fetchCol
fetchCol($sql, $bind = array())
Obtenir. le premier nom de champ de toutes les lignes de résultats
$db = $this->getAdapter(); $videoArray=$db->fetchCol("SELECT name FROM m_video WHERE `is_jian` = :title",array('title' => '1'));
utilisation de fetchOne
fetchOne($sql, $bind = array())
Récupérer uniquement la première valeur du champ
$db = $this->getAdapter(); echo $videoArray=$db->fetchOne("SELECT count(*) FROM m_video WHERE `is_jian` = :title",array('title' => '1'));
Utilisation de fetchPairs
fetchPairs($sql, $bind = array())
Récupérer un tableau associé, la première valeur du champ est le code (id), le deuxième champ est la valeur (nom)
Retour : Array( [1] = > Zodiac Romance [2] => Peach Blossom Luck), 1,2 : sont les champs d'identification
$db = $this->getAdapter(); $videoArray=$db->fetchPairs("SELECT id, name FROM m_video WHERE is_jian = :title",array('title' => '1'));
Utilisation fetchRow
fetchRow($where = null, $order = null)
Récupérer uniquement la première ligne de l'ensemble de résultats
$videoArray=$this->fetchRow("is_jian=1 and is_guo=1", 'id DESC')->toArray();
Utilisation des requêtes
//function 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);
sélectionnez l'utilisation
$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();
ou utilisez
$stmt = $select->query(); $result = $stmt->fetchAll();
Si vous utilisez
$db->fetchAll($select)
directement, le le résultat est le même
Utilisation de la requête conjointe multi-tables
$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);
méthode find(), vous pouvez utiliser la valeur de la clé primaire pour récupérer les données dans la table .
// 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) Résumé de la suppression des données
Première méthode : vous pouvez supprimer n'importe quelle table
//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);// 删除数据并得到影响的行数
Deuxième méthode : Vous ne pouvez supprimer que
//delete用法 // delete($where) $where = "name = 'bbb'"; echo $this->delete($where);// 删除数据并得到影响的行数
(3) Résumé de la mise à jour des données
Le premier méthode : vous pouvez mettre à jour n'importe quelle table
// 以"列名"=>"数据"的格式构造更新数组,更新数据行 $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);
La deuxième méthode Méthode : uniquement
$set = array ( 'name' => '蝶影重重22', 'clicks' => '8880', ); $db = $this->getAdapter(); $where = $db->quoteInto('id = ?', '10');// where语句 $rows_affected = $this->update($set, $where);// 更新表数据,返回更新的行数
(4) Résumé de l'insertion des données
La première méthode : vous pouvez insérer des données dans n'importe quel tableau
$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()') )De cette façon, le nom du sous-champ insérera une chaîne de curdate(), et l'adresse Insérera une valeur temporelle (résultat de curdate() 2009-05-09) La deuxième méthode : ne peut convenir que pour ce qui est dans ce tableau et n'a pas encore été résumé
(5) Traitement des transactions
$table = 'm_gao';// 插入数据的数据表 $db = $this->getAdapter(); $db->beginTransaction();//Zend_Db_Adapter会回到自动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) Autres
$db = $this->getAdapter(); $tables = $db->listTables(); //列出当前数据库中的所有表 $fields = $db->describeTable('m_video');//列出一个表的字段情况Pour plus d'articles sur le résumé des compétences en matière d'exploitation de la base de données Zend Framework, veuillez prêter attention au site Web PHP chinois !