Zend Framework データベース操作スキルの概要

高洛峰
リリース: 2023-03-05 21:08:01
オリジナル
1721 人が閲覧しました

この記事は主に Zend Framework のデータベース操作スキルを紹介し、データベース操作における 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 ファイル:

rrりえ

データベース攻撃を防ぐために引用符を追加します引用の使用法

<?php foreach ($this->get2Video as $video): ?>
<?=$video[&#39;id&#39;]; ?>
<?=$video[&#39;name&#39;]; ?>
<? endforeach; ?>
ログイン後にコピー

quoteInto uses

$value = $db->quote(&#39;St John"s Wort&#39;);
// $value 现在变成了 &#39;"St John\"s Wort"&#39; (注意两边的引号)
// 为数组加引号
$value = $db->quote(array(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;));
// $value 现在变成了 &#39;"a", "b", "c"&#39; (","分隔的字符串)
ログイン後にコピー

(1) データクエリの概要

クエリを直接実行します (完全な SQL ステートメントを使用します)

echo $where = $db->quoteInto(&#39;id = ?&#39;, 1);
// $where 现在为 &#39;id = "1"&#39; (注意两边的引号)
// 在where语句中为数组加上引号
$where = $db->quoteInto(&#39;id IN(?)&#39;, array(1, 2, 3));
// $where 现在为 &#39;id IN("1", "2", "3")&#39; (一个逗号分隔的字符串)
ログイン後にコピー

fetchAll の使用法

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

結果セット内のすべてのフィールドの値を取得し、次のように返します。パラメータが連続配列でない場合は null に設定しますfetchAll($where = null, $order = null, $count = null, $offset = null)

取回结果集中所有字段的值,作为连续数组返回,如果参数不设置就写成null

可以取回结果集的指定条数

//function quoteInto($text, $value, $type = null, $count = null)
$db = $this->getAdapter();
$sql = $db->quoteInto(&#39;SELECT * FROM `m_video` WHERE `is_guo` =?&#39;, &#39;1&#39;);
$result = $db->query($sql);
// 使用PDOStatement对象$result将所有结果数据放到一个数组中
$videoArray = $result->fetchAll();
ログイン後にコピー

fetchAssoc用法

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

取回结果集中所有字段的值,作为关联数组返回, 第一个字段作为码

$videoArray=$this->fetchAll("is_jian=1 and is_guo=1","id DESC",0,2)->toArray();
ログイン後にコピー

fetchCol用法

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

取回所有结果行的第一个字段名

$db = $this->getAdapter();
$videoArray=$db->fetchAssoc("SELECT * FROM m_video WHERE `is_jian` = :title",array(&#39;title&#39; => &#39;1&#39;));
ログイン後にコピー

fetchOne用法

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

只取回第一个字段值

$db = $this->getAdapter();
$videoArray=$db->fetchCol("SELECT name FROM m_video WHERE `is_jian` = :title",array(&#39;title&#39; => &#39;1&#39;));
ログイン後にコピー

fetchPairs用法

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

取回一个相关数组,第一个字段值为码(id),第二个字段为值(name)

返回:Array( [1] => 十二生肖奇缘 [2] => 桃花运),1,2:为id字段

$db = $this->getAdapter();
echo $videoArray=$db->fetchOne("SELECT count(*) FROM m_video WHERE `is_jian` = :title",array(&#39;title&#39; => &#39;1&#39;));
ログイン後にコピー

fetchRow用法

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

結果セット内の指定した数の結果を取得できます

fetchAssoc($sql, $bind = array() )結果セット内のすべての結果を取得します。フィールドの値は連想配列として返され、最初のフィールドはコードとして使用されます

$db = $this->getAdapter();
$videoArray=$db->fetchPairs("SELECT id, name FROM m_video WHERE is_jian = :title",array(&#39;title&#39; => &#39;1&#39;));
ログイン後にコピー

fetchColの使用法

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

すべての結果行を取得します 最初のフィールド名

$videoArray=$this->fetchRow("is_jian=1 and is_guo=1", &#39;id DESC&#39;)->toArray();
ログイン後にコピー

fetchOneの使用法

fetchOne($sql, $bind = array())</code ></p><p>最初のフィールド値のみを取得します</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">//function query($sql, $bind = array()) $db = $this-&gt;getAdapter(); $result = $db-&gt;query(&amp;#39;SELECT * FROM `m_video`&amp;#39;); //$result = $db-&gt;query(&amp;#39;SELECT * FROM `m_video` WHERE `name` = ? AND id = ?&amp;#39;,array(&amp;#39;十二生肖奇缘&amp;#39;, &amp;#39;1&amp;#39;)); //$result-&gt;setFetchMode(Zend_Db::FETCH_OBJ);//FETCH_OBJ为默认值,FETCH_NUM,FETCH_BOTH //while ($row = $result-&gt;fetch()) { // echo $row[&amp;#39;name&amp;#39;]; //} //$rows = $result-&gt;fetch(); //$rows = $result-&gt;fetchAll(); //$obj = $result-&gt;fetchObject();//echo $obj-&gt;name; // echo $Column = $result-&gt;fetchColumn(0);//得到结果集的第一个字段,比如0为id号,用于只取一个字段的情况 print_r($rows);</pre><div class="contentsignin">ログイン後にコピー</div></div><p><strong>fetchPairsの使用法</strong></p><p><code>fetchPairs($sql, $bind = array())関連する配列を取得します。最初のフィールド値はコード (id)、2 番目のフィールドは値 (名前) です

Return: Array([1] => Zodiac Romance [2] => Peach Blossom Luck)、1,2: ID フィールドです

$db = $this->getAdapter();
$select = $db->select();
$select->from(&#39;m_video&#39;, array(&#39;id&#39;,&#39;name&#39;,&#39;clicks&#39;))
->where(&#39;is_guo = :is_guo and name = :name&#39;)
->order(&#39;name&#39;)// 按什么排序列,参加为数组(多个字段)或字符串(一个字段)
->group()//分组
->having()//分组查询数据的条件
->distinct()// 无参数,去掉重复的值。有时候与groupby返回的结果一样
->limit(10);
// 读取结果使用绑定的参数
$params = array(&#39;is_guo&#39; => &#39;1&#39;,&#39;name&#39;=>&#39;十二生肖奇缘&#39;);
//$sql = $select->__toString();//得到查询语句,可供调试
$result = $db->fetchAll($select,$params);
执行select的查询
$stmt = $db->query($select);
$result = $stmt->fetchAll();
ログイン後にコピー

fetchRow の使用法

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

結果セットの最初の行のみを取得します

$stmt = $select->query();
$result = $stmt->fetchAll();
ログイン後にコピー

クエリの使用法

$db->fetchAll($select)
ログイン後にコピー

使用法を選択


$db = $this->getAdapter();
$select = $db->select();
$select->from(&#39;m_video&#39;, array(&#39;id&#39;,&#39;name&#39;,&#39;pic&#39;,&#39;actor&#39;,&#39;type_id&#39;,&#39;up_time&#39;))
->where(&#39;is_guo = :is_guo and is_jian = :is_jian&#39;)
->order(&#39;up_time&#39;)
->limit(2);
$params = array(&#39;is_guo&#39; => &#39;1&#39;,&#39;is_jian&#39;=>&#39;1&#39;);
$select->join(&#39;m_type&#39;, &#39;m_video.type_id = m_type.t_id&#39;, &#39;type_name&#39;);//多表联合查询
$videoArray = $db->fetchAll($select,$params);
ログイン後にコピー

を使用するか、

// 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));
ログイン後にコピー
を直接使用する場合は
//quoteInto($text, $value, $type = null, $count = null)
$table = &#39;m_video&#39;;// 设定需要删除数据的表
$db = $this->getAdapter();
$where = $db->quoteInto(&#39;name = ?&#39;, &#39;ccc&#39;);// 删除数据的where条件语句
echo $rows_affected = $db->delete($table, $where);// 删除数据并得到影响的行数
ログイン後にコピー

を使用します。結果は同じです

複数テーブルの結合クエリ

//delete用法
// delete($where)
$where = "name = &#39;bbb&#39;";
echo $this->delete($where);// 删除数据并得到影响的行数
ログイン後にコピー

find()メソッドを使用すると、主キーの値を使用してデータを取得できますテーブル。

// 以"列名"=>"数据"的格式构造更新数组,更新数据行
$table = &#39;m_video&#39;;// 更新的数据表
$db = $this->getAdapter();
$set = array (
&#39;name&#39; => &#39;蝶影重重&#39;,
&#39;clicks&#39; => &#39;888&#39;,
);
$where = $db->quoteInto(&#39;id = ?&#39;, &#39;10&#39;);// where语句
// 更新表数据,返回更新的行数
echo $rows_affected = $db->update($table, $set, $where);
ログイン後にコピー

(2) データ削除の概要

最初の方法: はい、任意のテーブルを削除します

$set = array (
&#39;name&#39; => &#39;蝶影重重22&#39;,
&#39;clicks&#39; => &#39;8880&#39;,
);
$db = $this->getAdapter();
$where = $db->quoteInto(&#39;id = ?&#39;, &#39;10&#39;);// where语句
$rows_affected = $this->update($set, $where);// 更新表数据,返回更新的行数
ログイン後にコピー

2 番目の方法: のみ

$table = &#39;m_gao&#39;;// 插入数据的数据表
$db = $this->getAdapter();
// 以"列名"=>"数据"的格式格式构造插入数组,插入数据行
$row = array (
&#39;title&#39;   => &#39;大家好。111&#39;,
&#39;content&#39; => &#39;影视网要改成用zend framework开发啊&#39;,
&#39;time&#39; => &#39;2009-05-04 17:23:36&#39;,
);
// 插入数据行并返回插入的行数
$rows_affected = $db->insert($table, $row);
// 最后插入的数据id
echo $last_insert_id = $db->lastInsertId();
$row=array(
&#39;name&#39;=>&#39;curdate()&#39;,
&#39;address&#39; => new Zend_Db_Expr (&#39;curdate()&#39;)
)
ログイン後にコピー

(3) このテーブルのデータ更新概要は、削除されました🎜🎜🎜🎜最初の方法: 任意のテーブルを更新できます🎜🎜
$table = &#39;m_gao&#39;;// 插入数据的数据表
$db = $this->getAdapter();
$db->beginTransaction();//Zend_Db_Adapter会回到自动commit模式下,直到你再次调用 beginTransaction()方法
// 以"列名"=>"数据"的格式格式构造插入数组,插入数据行
$row = array (
&#39;id&#39;=>null,
&#39;title&#39;   => &#39;大家好。111&#39;,
&#39;content&#39; => &#39;影视网要改成用zend framework开发啊&#39;,
&#39;time&#39; => &#39;2009-05-04 17:23:36&#39;,
);
try {
// 插入数据行并返回插入的行数
$rows_affected = $db->insert($table, $row);
// 最后插入的数据id
$last_insert_id = $db->lastInsertId();
$db->commit();// 事务提交
}catch (Exception $e){
$db->rollBack();
echo &#39;捕获异常:&#39;.$e->getMessage();//打出异常信息
}
echo $last_insert_id;
ログイン後にコピー
🎜🎜 2つの方法: 🎜🎜
$db = $this->getAdapter();
$tables = $db->listTables(); //列出当前数据库中的所有表
$fields = $db->describeTable(&#39;m_video&#39;);//列出一个表的字段情况
ログイン後にコピー
のみを更新できます🎜🎜🎜🎜🎜(4) データ挿入の概要🎜🎜🎜🎜最初の方法: あなたこのように、任意のテーブルにデータを挿入できます🎜🎜🎜🎜🎜rrreee🎜 フィールド名には curdate() の文字列が挿入され、アドレスには時間値 (curdate() 2009-05-09 の結果) が挿入されます🎜🎜 2 番目の方法: この表にあるものにのみ適しており、まだまとめられていません🎜🎜 🎜(5)トランザクション処理🎜🎜rrreee🎜🎜(6)その他🎜🎜rrreee🎜Zend Framework データベース操作スキルの概要関連の詳細については、記事をご覧の際は、PHP 中国語 Web サイトにご注意ください。 🎜

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート