Maison >php教程 >PHP开发 >Résumé de l'exemple de méthode de fonctionnement de la base de données Zend Framework

Résumé de l'exemple de méthode de fonctionnement de la base de données Zend Framework

高洛峰
高洛峰original
2017-01-05 09:31:161266parcourir

Les exemples de cet article décrivent la méthode de fonctionnement de la base de données Zend Framework. Partagez-le avec tout le monde pour référence, comme suit :

Exemple :

<?php
//
// SELECT *
//   FROM round_table
//   WHERE noble_title = "Sir"
//   ORDER BY first_name
//   LIMIT 10 OFFSET 20
//
// 你可以使用一种重复定义的方式...
$select->from(&#39;round_table&#39;, &#39;*&#39;);
$select->where(&#39;noble_title = ?&#39;, &#39;Sir&#39;);
$select->order(&#39;first_name&#39;);
$select->limit(10,20);
// ...或者使用一种连续定义的方式:
$select->from(&#39;round_table&#39;, &#39;*&#39;)
->where(&#39;noble_title = ?&#39;, &#39;Sir&#39;)
->order(&#39;first_name&#39;)
->limit(10,20);
// 但是,读取数据的方法相同
$sql = $select->__toString();
$result = $db->fetchAll($sql);
// 对于以上任一种方式,你都可以传送$select对象本身
// 使用Zend_Db_Select对象的 __toString()方法就可以得到查询语句
$result = $db->fetchAll($select);
?>

Vous pouvez également utiliser des paramètres liés dans votre instruction de requête sans ajouter vous-même des guillemets pour les paramètres.

<?php
//
// SELECT *
//   FROM round_table
//   WHERE noble_title = "Sir"
//   ORDER BY first_name
//   LIMIT 10 OFFSET 20
//
$select->from(&#39;round_table&#39;, &#39;*&#39;)
  ->where(&#39;noble_title = :title&#39;)
  ->order(&#39;first_name&#39;)
  ->limit(10,20);
// 读取结果使用绑定的参数
$params = array(&#39;title&#39; => &#39;Sir&#39;);
$result = $db->fetchAll($select, $params);
?>

Interroger plusieurs colonnes de données dans la même table

Lorsque vous devez interroger certaines colonnes d'une table spécifiée, vous pouvez utiliser la méthode from() pour ajouter le nom de la table et Les noms des colonnes à interroger sont spécifiés dans cette méthode. Les noms de tables et de colonnes peuvent être remplacés par des alias, et la méthode from() peut également être utilisée autant de fois que nécessaire.

<?php
// 创建一个$db对象,假定adapter为Mysql
$select = $db->select();
// 从some_table表中读取a,b,c三列
$select->from(&#39;some_table&#39;, &#39;a, b, c&#39;);
// 同样可以:
$select->from(&#39;some_table&#39;, array(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;);
// 从foo AS bar表中读取列bar.col
$select->from(&#39;foo AS bar&#39;, &#39;bar.col&#39;);
// 从foo, bar两个表中读取foo.col 别名为col1,bar.col别名为col2
$select->from(&#39;foo&#39;, &#39;foo.col AS col1&#39;);
$select->from(&#39;bar&#39;, &#39;bar.col AS col2&#39;);
?>

Requête conjointe multi-tables

Lorsque vous devez effectuer une requête conjointe de table, vous pouvez utiliser la méthode join(). Tout d'abord, définissez le nom de la table pour la requête d'union de tables, puis les conditions d'union de tables (remarque : cette condition concerne les jointures internes de plusieurs tables) et enfin le nom de colonne de la requête. De même, vous pouvez utiliser la méthode join() autant de fois que nécessaire.

<?php
// 创建一个$db对象,假定adapter为Mysql.
$select = $db->select();
//
// SELECT foo.*, bar.*
//   FROM foo
//   JOIN bar ON foo.id = bar.id
//
$select->from(&#39;foo&#39;, &#39;*&#39;);
$select->join(&#39;bar&#39;, &#39;foo.id = bar.id&#39;, &#39;*&#39;);
?>

Condition WHERE

Lorsque vous devez ajouter une condition Where, vous pouvez utiliser la méthode Where(). Vous pouvez transmettre une chaîne de requête normale, ou vous pouvez transmettre une utilisation ?

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT *
//   FROM round_table
//   WHERE noble_title = "Sir"
//   AND favorite_color = "yellow"
//
$select->from(&#39;round_table&#39;, &#39;*&#39;);
$select->where(&#39;noble_title = "Sir"&#39;); // embedded value
$select->where(&#39;favorite_color = ?&#39;, &#39;yellow&#39;); // quoted value
//
// SELECT *
//   FROM foo
//   WHERE bar = "baz"
//   OR id IN("1", "2", "3")
//
$select->from(&#39;foo&#39;, &#39;*&#39;);
$select->where(&#39;bar = ?&#39;, &#39;baz&#39;);
$select->orWhere(&#39;id IN(?)&#39;, array(1, 2, 3);
?>

Clause GROUP BY

Si nécessaire, la méthode group() peut être utilisée plusieurs fois pour regrouper les données interrogées

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT COUNT(id)
//   FROM foo
//   GROUP BY bar, baz
//
$select->from(&#39;foo&#39;, &#39;COUNT(id)&#39;);
$select->group(&#39;bar&#39;);
$select->group(&#39;baz&#39;);
// 同样可以这样调用 group() 方法:
$select->group(&#39;bar, baz&#39;);
// 还可以:
$select->group(array(&#39;bar&#39;, &#39;baz&#39;));
?>

Condition HAVING

Lorsque vous devez ajouter des conditions d'avoir aux résultats de la requête, vous pouvez utiliser la méthode ayant(). Cette méthode a la même fonction que la méthode Where().

Lorsque vous appelez la méthode ayant() plusieurs fois, les conditions de chaque avoir seront "fusionnées" ensemble pour l'opération si vous devez implémenter l'opération "ou", vous pouvez utiliser la méthode orHaving() ; .

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT COUNT(id) AS count_id
//   FROM foo
//   GROUP BY bar, baz
//   HAVING count_id > "1"
//
$select->from(&#39;foo&#39;, &#39;COUNT(id) AS count_id&#39;);
$select->group(&#39;bar, baz&#39;);
$select->having(&#39;count_id > ?&#39;, 1);
?>

Clause ORDER BY

Si nécessaire, vous pouvez utiliser la méthode order() plusieurs fois pour trier les données interrogées

<?php
// 创建一个$db对象,调用SELECT方法.
$select = $db->select();
//
// SELECT * FROM round_table
//   ORDER BY noble_title DESC, first_name ASC
//
$select->from(&#39;round_table&#39;, &#39;*&#39;);
$select->order(&#39;noble_title DESC&#39;);
$select->order(&#39;first_name&#39;);
// 同样可以这样调用 order() 方法:
$select->order(&#39;noble_title DESC, first_name&#39;);
// 还可以:
$select->order(array(&#39;noble_title DESC&#39;, &#39;first_name&#39;));
?>

Par total et partiel Limite LIMIT sur le montant du déplacement

Zend_db_select peut prendre en charge les restrictions d'instructions de limite au niveau de la couche de base de données. Pour certaines bases de données, telles que mysql et postgresql, l'implémentation est relativement simple car ces bases de données prennent en charge nativement la syntaxe "limit:count".

Pour certaines autres bases de données, telles que SQL Server et Oracle de Microsoft, il n'est pas si simple d'implémenter la fonction limit, car elles-mêmes ne prennent pas du tout en charge l'instruction limit. MS-SQL a une instruction top pour l'implémenter, mais si Oracle souhaite implémenter la fonction limit, la façon d'écrire l'instruction de requête est plus spéciale. En raison de la façon dont zend_db_select fonctionne intrinsèquement, nous pouvons réécrire l'instruction select pour implémenter la fonctionnalité de limite du système de base de données open source ci-dessus dans Oracle.

Pour limiter les résultats renvoyés en définissant le nombre total et le décalage de la requête, vous pouvez utiliser la méthode limit(), avec le nombre total et un décalage facultatif comme paramètres pour appeler cette méthode.

<?php
// 首先,一个简单的 "LIMIT :count"
$select = $db->select();
$select->from(&#39;foo&#39;, &#39;*&#39;);
$select->order(&#39;id&#39;);
$select->limit(10);
//
// 在mysql/psotgreSql/SQLite,可以得到这样的语句:
//
// SELECT * FROM foo
//   ORDER BY id ASC
//   LIMIT 10
//
// 但是在Microsoft SQL下,可以得到这样的语句:
//
// SELECT TOP 10 * FROM FOO
//   ORDER BY id ASC
//
//
// 现在, 是更复杂的 "LIMIT :count OFFSET :offset"方法
$select = $db->select();
$select->from(&#39;foo&#39;, &#39;*&#39;);
$select->order(&#39;id&#39;);
$select->limit(10, 20);
//
// 在mysql/psotgreSql/SQLite,可以得到这样的语句:
//
// SELECT * FROM foo
//   ORDER BY id ASC
//   LIMIT 10 OFFSET 20
//
// 但是在Microsoft SQL下,由于不支持偏移量功能,可以得到这样sql语句:
//
// SELECT * FROM (
//   SELECT TOP 10 * FROM (
//     SELECT TOP 30 * FROM foo ORDER BY id DESC
//   ) ORDER BY id ASC
// )
//
// Zend_Db_Adapter 可以自动的完成sql语句的动态创建.
//
?>

Limite LIMIT par numéro de page et nombre total

Zend_db_select fournit également une fonction de limite de rotation de page. Si vous souhaitez rechercher un "nombre de pages" spécifique de résultats à partir des résultats, utilisez la méthode limitPage() ; transmettez simplement la valeur de page dont vous avez besoin et le nombre de valeurs de données affichées sur chaque page en tant que paramètres.

<?php
// 构造基础的select方法:
$select = $db->select();
$select->from(&#39;foo&#39;, &#39;*&#39;);
$select->order(&#39;id&#39;);
// ... 限制到第三页,每页包括10行数据
$select->limitPage(3, 10);
//
// 在MySQL/PostgreSQL/SQLite下, 可以得到:
//
// SELECT * FROM foo
//   ORDER BY id ASC
//   LIMIT 10 OFFSET 20
//
?>

J'espère que cet article sera utile à la programmation PHP de chacun basée sur le framework Zend Framework.

Pour plus d'exemples de méthodes de fonctionnement de base de données Zend Framework et d'articles récapitulatifs connexes, veuillez prêter attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn