国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 php教程 PHP開發(fā) Zend Framework教程之Zend_Db_Table用法詳解

Zend Framework教程之Zend_Db_Table用法詳解

Jan 05, 2017 am 09:54 AM

本文實例講述了Zend_Db_Table用法。分享給大家供大家參考,具體如下:

1. 簡介

Zend_Db_Table 是Zend Framework的表模塊.它通過zend_db_adapter連接到 數(shù)據(jù)庫,為數(shù)據(jù)庫模式檢查表對象,并對該表進行操作和查詢.

2. 開始

首先需要為抽象類zend_db_table(ares注:該類為抽象類,所以不能直接實例 化,只能先繼承該類,然后實例化子類)設(shè)定一個默認對數(shù)據(jù)庫adapter;除非你 指定其他類型數(shù)據(jù)庫adapter,否則,所有的zend_db_table類實例都會使用 默認adapter.

<?php
// 建立一個 adapter
require_once &#39;Zend/Db.php&#39;;
$params = array (
  &#39;host&#39;   => &#39;127.0.0.1&#39;,
  &#39;username&#39; => &#39;malory&#39;,
  &#39;password&#39; => &#39;******&#39;,
  &#39;dbname&#39;  => &#39;camelot&#39;
);
$db = Zend_Db::factory(&#39;PDO_MYSQL&#39;, $params);
// 為所有的Zend_Db_Table對象設(shè)定默認的adapter
require_once &#39;Zend/Db/Table.php&#39;;
Zend_Db_Table::setDefaultAdapter($db);
?>

接下來,我們假定數(shù)據(jù)庫中存在一個名為”round_table”的表.要對該表 使用zend_db_table,只需繼承zend_db_table類創(chuàng)建一個名為RoundTable的 新類.然后我就可以通過該類在數(shù)據(jù)庫中的round_table表中檢查,操作數(shù)據(jù) 行并且取得數(shù)據(jù)結(jié)果.

<?php
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
?>

3. 表名和主鍵

默認情況下,zend_db_table類會將其類名當(dāng)作數(shù)據(jù)庫中表名(大小寫不同 的地方需要添加"_").例如,一個名為SomeTableName的zend_db_table類在 數(shù)據(jù)庫中就對應(yīng)表”some_table_name”.假如不希望將類名與數(shù)據(jù)庫表名以 這種添加下劃線的形式進行對應(yīng),可以在定義該類時對$_name進行重構(gòu).

<?php
class ClassName extends Zend_Db_Table
{
  // 默認表名為 &#39;class_name&#39;
  // 但是我們也可以對應(yīng)其它表
  protected $_name = &#39;another_table_name&#39;;
}
?>

zend_db_table類默認字段”id”為表的主鍵(該字段最好為自增的,但并不 是必須的).假如該表的主鍵并不是名為”$id”,你可以在定義表實體類時 對$_primary進行重構(gòu)

<?php
class ClassName extends Zend_Db_Table
{
  // 默認主鍵為&#39;id&#39;
  // 但我們也可以設(shè)定其他列名為主鍵
  protected $_primary = &#39;another_column_name&#39;;
}
?>

你也可以通過表實體類中_setup()方法設(shè)定這些變量;但是需要確保在修改 后再執(zhí)行一次parent::_setup()方法.

<?php
class ClassName extends Zend_Db_Table
{
  protected function _setup()
  {
    $this->_name = &#39;another_table_name&#39;;
    $this->_primary = &#39;another_column_name&#39;;
    parent::_setup();
  }
}
?>

4. 插入數(shù)據(jù)

要在表中插入一行新數(shù)據(jù),只需要將列名:數(shù)據(jù)的關(guān)聯(lián)數(shù)組作為參數(shù),調(diào) 用insert()方法即可.

(zend framework)會自動對數(shù)據(jù)進行加引號處理, 并返回插入的最后一行的id值
(注意:這里不同于 zend_db_adapter::insert方法,后者返回的是插入的行數(shù)).

<?php
//
// INSERT INTO round_table
//   (noble_title, first_name, favorite_color)
//   VALUES ("King", "Arthur", "blue")
//
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$data = array(
  &#39;noble_title&#39; => &#39;King&#39;,
  &#39;first_name&#39; => &#39;Arthur&#39;,
  &#39;favorite_color&#39; => &#39;blue&#39;,
)
$id = $table->insert($data);
?>

5. 更新數(shù)據(jù)

要修改表中的任意行數(shù)據(jù),我們可以設(shè)定一個列名:數(shù)據(jù)的關(guān)聯(lián)數(shù)組作為參數(shù),調(diào) 用update()方法,同是通過一個where條件從句來決定需要改變的行.該方法將會 修改表中數(shù)據(jù)并返回被修改的行數(shù).

(Zend frameword)將會自動對修改對數(shù)據(jù)進行加引號處理,但是這種檢查不包括 條件分句,所以你需要使用該表的zend_db_adapter對象完成該工作.

class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
$set = array(
  &#39;favorite_color&#39; => &#39;yellow&#39;,
)
$where = $db->quoteInto(&#39;first_name = ?&#39;, &#39;Robin&#39;);
$rows_affected = $table->update($set, $where);

6. Deleting Rows

要刪除表中的數(shù)據(jù),我們可以調(diào)用delete()方法,同時通過一個where條件 分句來決定需要刪除的行.該方法將會返回被刪除的行數(shù).

(zend framework)不會對條件分句進行加引號處理,所以你需要使用該表 的zend_db_adapter對象完成該工作

<?php
//
// DELETE FROM round_table
//   WHERE first_name = "Patsy"
//
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
$where = $db->quoteInto(&#39;first_name = ?&#39;, &#39;Patsy&#39;);
$rows_affected = $table->delete($where);
?>

7. 根據(jù)主鍵查找數(shù)據(jù)

通過調(diào)用find()方法,可以使用主鍵值輕松地在表中檢索數(shù)據(jù).假如你只想要查詢某 一條數(shù)據(jù),該方法將回返回一個zend_db_table_row對象,而當(dāng)你想要查詢多條記錄時 ,將會返回一個zend_db_table_rowset對象.

<?php
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
// 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));
?>

8. 取回一條記錄

雖然通過主鍵找到相應(yīng)數(shù)據(jù)行是很便利的事情,但是在更多的時候,我們是 通過其他一些非主鍵的條件來查找數(shù)據(jù)行的.zend_db_table提供了一個 fetchRow()方法可以實現(xiàn)這個功能.我們可以通過一個where條件語句(和一 個可選的order語句)調(diào)用fetchRow()方法,然后zend_db_tabel將會返回滿 足條件的第一行數(shù)據(jù)的zend_db_table_row對象.

注意,(zend framework) 將不會對where語句進行加引號處理,所以你需要 通過zend_db_adapter進行數(shù)據(jù)處理

<?php
//
// SELECT * FROM round_table
//   WHERE noble_title = "Sir"
//   AND first_name = "Robin"
//   ORDER BY favorite_color
//
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
$where = $db->quoteInto(&#39;noble_title = ?&#39;, &#39;Sir&#39;)
    . $db->quoteInto(&#39;AND first_name = ?&#39;, &#39;Robin&#39;);
$order = &#39;favorite_color&#39;;
$row = $table->fetchRow($where, $order);
?>

9. 取回多條記錄

假如需要一次檢索多條記錄.可以使用fetchAll()方法.和使用fetchRow()方法類 似,該方法不僅僅可以設(shè)定where和order分句,也可以設(shè)定limit-count和 limit-offset值來限制返回的結(jié)果數(shù).執(zhí)行該方法后,把選擇的結(jié)果作為一個 Zend_Db_Table_Rowset對象返回.
注意,(zend framework) 將不會對where語句進行加引號處理,所以你需要 通過zend_db_adapter進行數(shù)據(jù)處理.

<?php
class RoundTable extends Zend_Db_Table {}
$table = new RoundTable();
$db = $table->getAdapter();
// SELECT * FROM round_table
//   WHERE noble_title = "Sir"
//   ORDER BY first_name
//   LIMIT 10 OFFSET 20
$where = $db->quoteInto(&#39;noble_title = ?&#39;, &#39;Sir&#39;);
$order = &#39;first_name&#39;;
$count = 10;
$offset = 20;
$rowset = $table->fetchAll($where, $order, $count, $offset);
?>

10. Adding Domain Logic

作為Zend Framework的表模塊,Zend_Db_Table將它自己很好的封裝到獨特的domain logic下. 例如,你可以重載insert()和update()方法,以實現(xiàn)在數(shù)據(jù)更改提交前的操作和驗證.

<?php
class RoundTable extends Zend_Db_Table
{
  public function insert($data)
  {
    // 添加一個時間戳
    if (empty($data[&#39;created_on&#39;])) {
      $data[&#39;created_on&#39;] = time();
    }
    return parent::insert($data);
  }
  public function update($data)
  {
    // 添加一個時間戳
    if (empty($data[&#39;updated_on&#39;])) {
      $data[&#39;updated_on&#39;] = time();
    }
    return parent::update($data);
  }
}
?>

類似的,你也可以設(shè)定自己的find()方法,通過主鍵外的其他字段來查詢數(shù)據(jù).

<?php
class RoundTable extends Zend_Db_Table
{
  public function findAllWithName($name)
  {
    $db = $this->getAdapter();
    $where = $db->quoteInto("name = ?", $name);
    $order = "first_name";
    return $this->fetchAll($where, $order);
  }
}
?>

希望本文所述對大家基于Zend Framework框架的PHP程序設(shè)計有所幫助。

更多Zend Framework教程之Zend_Db_Table用法詳解相關(guān)文章請關(guān)注PHP中文網(wǎng)!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276