欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Zend Framework教程之Zend_Db_Table用法詳解

 更新時(shí)間:2016年03月21日 10:05:09   作者:haiwei.sun  
這篇文章主要介紹了Zend Framework教程之Zend_Db_Table用法,結(jié)合實(shí)例形式詳細(xì)分析了Zend_Db_Table的功能,使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

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

1. 簡(jiǎn)介

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

2. 開始

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

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

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

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

3. 表名和主鍵

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

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

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

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

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

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

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

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

(zend framework)會(huì)自動(dòng)對(duì)數(shù)據(jù)進(jìn)行加引號(hào)處理, 并返回插入的最后一行的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(
  'noble_title' => 'King',
  'first_name' => 'Arthur',
  'favorite_color' => 'blue',
)
$id = $table->insert($data);
?>

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

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

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

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

6. Deleting Rows

要?jiǎng)h除表中的數(shù)據(jù),我們可以調(diào)用delete()方法,同時(shí)通過(guò)一個(gè)where條件 分句來(lái)決定需要?jiǎng)h除的行.該方法將會(huì)返回被刪除的行數(shù).

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

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

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

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

<?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. 取回一條記錄

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

注意,(zend framework) 將不會(huì)對(duì)where語(yǔ)句進(jìn)行加引號(hào)處理,所以你需要 通過(guò)zend_db_adapter進(jìn)行數(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('noble_title = ?', 'Sir')
    . $db->quoteInto('AND first_name = ?', 'Robin');
$order = 'favorite_color';
$row = $table->fetchRow($where, $order);
?>

9. 取回多條記錄

假如需要一次檢索多條記錄.可以使用fetchAll()方法.和使用fetchRow()方法類 似,該方法不僅僅可以設(shè)定where和order分句,也可以設(shè)定limit-count和 limit-offset值來(lái)限制返回的結(jié)果數(shù).執(zhí)行該方法后,把選擇的結(jié)果作為一個(gè) Zend_Db_Table_Rowset對(duì)象返回.
注意,(zend framework) 將不會(huì)對(duì)where語(yǔ)句進(jìn)行加引號(hào)處理,所以你需要 通過(guò)zend_db_adapter進(jìn)行數(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('noble_title = ?', 'Sir');
$order = 'first_name';
$count = 10;
$offset = 20;
$rowset = $table->fetchAll($where, $order, $count, $offset);
?>

10. Adding Domain Logic

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

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

類似的,你也可以設(shè)定自己的find()方法,通過(guò)主鍵外的其他字段來(lái)查詢數(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);
  }
}
?>

更多關(guān)于zend相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門教程》、《php優(yōu)秀開發(fā)框架總結(jié)》、《Yii框架入門及常用技巧總結(jié)》、《ThinkPHP入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總

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

相關(guān)文章

  • PHP設(shè)計(jì)模式(八)裝飾器模式Decorator實(shí)例詳解【結(jié)構(gòu)型】

    PHP設(shè)計(jì)模式(八)裝飾器模式Decorator實(shí)例詳解【結(jié)構(gòu)型】

    這篇文章主要介紹了PHP設(shè)計(jì)模式:裝飾器模式Decorator,結(jié)合實(shí)例形式分析了PHP裝飾器模式Decorator相關(guān)概念、功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • Yii2 queue的隊(duì)列使用詳解

    Yii2 queue的隊(duì)列使用詳解

    這篇文章主要介紹了Yii2 queue的隊(duì)列使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 淺談laravel 5.6 安裝 windows上使用composer的安裝過(guò)程

    淺談laravel 5.6 安裝 windows上使用composer的安裝過(guò)程

    今天小編就為大家分享一篇淺談laravel 5.6 安裝 windows上使用composer的安裝過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-10-10
  • php中的curl使用入門教程和常見用法實(shí)例

    php中的curl使用入門教程和常見用法實(shí)例

    起先cURL是做為一種命令行工具設(shè)計(jì)出來(lái)的,比較幸運(yùn)的是,php也支持cURL了。通過(guò)cURL這個(gè)利器,我們能在php程序中自由地發(fā)送HTTP請(qǐng)求到某個(gè)url來(lái)獲取或者提交數(shù)據(jù),并且支持其它多種協(xié)議,比如FTP,Telnet以及SMTP等。在這篇博文中,我將簡(jiǎn)述下,在php中具體怎么使用cURL來(lái)處理一些事情。
    2014-04-04
  • PHP 提取圖片img標(biāo)記中的任意屬性的簡(jiǎn)單實(shí)例

    PHP 提取圖片img標(biāo)記中的任意屬性的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了PHP 提取圖片img標(biāo)記中的任意屬性的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下
    2013-12-12
  • ThinkPHP打水印及設(shè)置水印位置的方法

    ThinkPHP打水印及設(shè)置水印位置的方法

    這篇文章主要介紹了ThinkPHP打水印及設(shè)置水印位置的方法,結(jié)合實(shí)例形式分析了thinkPHP打印與設(shè)置水印的相關(guān)操作步驟與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10
  • YII Framework框架教程之使用YIIC快速創(chuàng)建YII應(yīng)用詳解

    YII Framework框架教程之使用YIIC快速創(chuàng)建YII應(yīng)用詳解

    這篇文章主要介紹了YII Framework框架教程之使用YIIC快速創(chuàng)建YII應(yīng)用的方法,詳細(xì)分析說(shuō)明了YII Framework框架使用YIIC命令行創(chuàng)建應(yīng)用的相關(guān)技巧與注意事項(xiàng),需要的朋友可以參考下
    2016-03-03
  • phpStorm+XDebug+chrome 配置詳解

    phpStorm+XDebug+chrome 配置詳解

    這篇文章主要介紹了phpStorm+XDebug+chrome 配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • php設(shè)計(jì)模式之命令模式的應(yīng)用詳解

    php設(shè)計(jì)模式之命令模式的應(yīng)用詳解

    本篇文章是對(duì)php的命令模式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Yii2實(shí)現(xiàn)多域名跨域同步登錄退出

    Yii2實(shí)現(xiàn)多域名跨域同步登錄退出

    本篇文章主要介紹了Yii2實(shí)現(xiàn)多域名跨域同步登錄退出,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02

最新評(píng)論