多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > ZendFramework > Zend Framework教程-Zend_Db-數據庫操作3-Zend_Db_Table 、Zend_Db_Table_Row 、Zend_

Zend Framework教程-Zend_Db-數據庫操作3-Zend_Db_Table 、Zend_Db_Table_Row 、Zend_

來源:程序員人生   發布時間:2013-12-27 00:04:47 閱讀次數:3588次

Zend_Db_Table 

Zend_Db_Table集成了Zend_Db_Table_Abstract抽象基類。實現了對數據表操作的相關方法。要使用Zend_Db_Table。需要將Zend_Db_Table設置為默認的適配器。


使用舉例如下:

項目一/db_demos1為例。用zend studio創建默認的應用項目即可

數據庫為test。表為user表。大概如下:

CREATE TABLE `user` (	`user_id` INT(10) NOT NULL AUTO_INCREMENT,	`user_name` VARCHAR(50) NULL DEFAULT NULL  ,	`user_password` CHAR(32) NULL DEFAULT NULL  ,	`user_email` VARCHAR(50) NULL DEFAULT NULL ,	`user_gender` VARCHAR(1) NULL DEFAULT NULL  ,	`user_description` VARCHAR(255) NULL DEFAULT NULL ,	PRIMARY KEY (`user_id`),	UNIQUE INDEX `user_name` (`user_name`))COMMENT='user'COLLATE='utf8_general_ci'ENGINE=InnoDB 


/db_demos1/application/Bootstrap.php

在Booststrap文件新增如下內容:作用是初始化數據庫和引入Zend_Db_Table

<?phpclass Bootstrap extends Zend_Application_Bootstrap_Bootstrap {		protected function _initdb() {		require_once 'Zend/Db.php';				$params = array (				'host' => '127.0.0.1',				'username' => 'root',				'password' => '',				'dbname' => 'test' 		);				$db = Zend_Db::factory ( 'PDO_MYSQL', $params );				// 為所有的Zend_Db_Table對象設定默認的adapter		require_once 'Zend/Db/Table.php';		Zend_Db_Table::setDefaultAdapter ( $db );	}}


通過集成Zend_Db_Table創建UserTable類。完成對數據表user的“”映射“。內容如下:

/db_demos1/application/models/UserTable.php

<?phpclass Application_Model_UserTable extends Zend_Db_Table {	protected $_name = 'user';	protected $_primary = 'user_id';}

通過$_name設置表名。通過$_primary設置主鍵。


使用方法:

/db_demos1/application/controllers/IndexController.php

<?phpclass IndexController extends Zend_Controller_Action{    public function init()    {        /* Initialize action controller here */    }    public function indexAction()    {            	$table = new Application_Model_UserTable();    	$data = array(    			'user_name' => 'zhangsan',    			'user_password'  => '123456',    			'user_email' => 'zhangsan@a.com',    			'user_gender' => '1',    			'user_description' => 'description ',    	);    	$id = $table->insert($data);    	 		var_dump($id);		exit;		     }

運行如果不出意外,會看到插入成功,返回插入數據的id。

以上就是使用Zend_Db_Table基本步驟。我們發現,一行sql語句沒寫,也做到了插入數據。 這就是Zend_Db_Table的作用。



繼承Zend_Db_Table自定義業務邏輯


Zend_Db_Table將它自己很好的封裝到獨特的domain logic下. 例如,你可以重載insert()和update()方法,以實現在數據更改提交前的操作和驗證. <?phpclass RoundTable extends Zend_Db_Table{    public function insert($data)    {        // 添加一個時間戳        if (empty($data['created_on'])) {            $data['created_on'] = time();        }        return parent::insert($data);    }    public function update($data)    {        // 添加一個時間戳        if (empty($data['updated_on'])) {            $data['updated_on'] = time();        }        return parent::update($data);    }}?>        類似的,你也可以設定自己的find()方法,通過主鍵外的其他字段來查詢數據. <?phpclass 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_Db_Table的使用方法。做個總結:

1.引入Zend_Db_Table的方法

如上。

2.繼承Zend_Db_Table實現自己的類

如上。

需要注意的命名空間。這里是用來默認的命名空間。如果要使用自己的,就需要自己在配置文件中設置了。具體可以參考之前的章節。

除了通過$_name設置表名。通過$_primary設置主鍵。手冊中還提供了一種方式,設置這些可變的東西。如下:采用_setup方法

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

3.插入

如上。

 

    	$data = array(    			'user_name' => 'zhangsan',    			'user_password'  => '123456',    			'user_email' => 'zhangsan@a.com',    			'user_gender' => '1',    			'user_description' => 'description ',    	);    	$id = $table->insert($data);    	 		var_dump($id);

4.更新

    	$set = array(    			'user_name' => 'zhangsan_new_name',    	);    	$db = $table->getAdapter();    	$where = $db->quoteInto('user_id = ?', '7');    	    	$rows_affected = $table->update($set, $where);    	var_dump($rows_affected) ;



5.刪除

    	$db = $table->getAdapter();    	    	$where = $db->quoteInto('user_id = ?', '1');    	    	$rows_affected = $table->delete($where);    	var_dump($rows_affected) ;



6.查找

1)主鍵

// SELECT * FROM user WHERE user_id = "2"    	$row = $table->find(2);       	var_dump($row);    	    	// SELECT * FROM user WHERE user_id IN("2", "3", "4")    	$rowset = $table->find(array(2, 3, 4));    	     	var_dump($rowset);


2) 獲取指定條件的一行數據

$db = $table->getAdapter();    	$where = $db->quoteInto('user_name = ?', 'user1').    	$db->quoteInto('AND user_gender = ?', '1');    	    	$order = 'user_name';    	    	$row = $table->fetchRow($where, $order);    	     	var_dump($row);


3)獲取多行數據


 

$db = $table->getAdapter();    	    	// SELECT * FROM user    	//     WHERE user_name = "user"    	//     ORDER BY user_name    	//     LIMIT 10 OFFSET 20    	    	$where = $db->quoteInto('user_name = ?', 'user');    	$order = 'user_name';    	$count = 10;    	$offset = 20;    	$rowset = $table->fetchAll($where, $order, $count, $offset);    	 var_dump($rowset);

查詢返回的結果集是Zend_Db_Table_Row或者Zend_Db_Table_RowSet

該通過什么方式來獲取我們想要的數據呢。繼續下面的說明


Zend_Db_Table_Row 

Zend_Db_Table_Row對象要來保存sql操作返回的結果集的一行。通過Zend_Db_Table_Row保存的屬性可以認為和數據表或者和sql語句的字段是一一對應的。不宜可以通過對應的字段獲取指定值。你也可以修改記錄的值然后,調用save()方法可以將更改保存到數據表中. 

具體操作如下:

以上述的例子

$table = new Application_Model_UserTable();    	$db = $table->getAdapter();    	$where = $db->quoteInto('user_id = ?', '3');    	    	$order = 'user_name';    	    	$row = $table->fetchRow($where, $order);    	//獲取數據    	var_dump('user_name:'.$row->user_name);    	var_dump('user_description:'.$row->user_description);    	    	echo '<br/>';    	//修改后    	$row->user_name = 'modify your name';    	$row->user_description='nothing';    	$row->save();    	    	    	$where = $db->quoteInto('user_id = ?', '3');    	    	$order = 'user_name';    	$row = $table->fetchRow($where, $order);    	var_dump('user_name:'.$row->user_name);    	var_dump('user_description:'.$row->user_description);    	exit;



Zend_Db_Table_Rowset



理解了Zend_Db_Table_Row,在理解Zend_Db_Table_Rowset就簡單的多了。Zend_Db_Table_Rowset是結果集。由Zend_Db_Table_Row組成。

    	$table = new Application_Model_UserTable();    	//SELECT * FROM user WHERE user_id IN("2", "3", "4")    	    	$rowset = $table->find(array(2, 3, 4));   		    // 顯示所有的記錄		foreach ($rowset as $row) {		   echo "<p>" . htmlspecialchars($row->user_name) . ":"		       . htmlspecialchars($row->user_description) . " </p>";		   $row->user_description = 'test'.mktime();		   $row->save();		}				$rowset = $table->find(array(2, 3, 4));		// 顯示所有的記錄		foreach ($rowset as $row) {			echo "<p>" . htmlspecialchars($row->user_name) . ":"			. htmlspecialchars($row->user_description) . " </p>";		}




具體更多的使用方法和額細節可以參考源碼理解。








生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产高清视频在线播放 | 老司机成人免费精品视频 | 免费视频亚洲 | 亚洲人成伊人成综合网久久久 | 天堂免费观看 | 国产麻豆视频在线观看 | 非洲黑人女bbwxxxx | www一级毛片 | 日本精品中文字幕在线播放 | 欧美性猛交xxx乱大交 | 国产视频h | 日本中文字幕网址 | 中文字幕第4页 | 久久亚洲人成国产精品 | 国产成人综合精品 | 天堂av影院 | 久久成人视 | 羞羞网址 | 欧美一级aa免费毛片 | 亚洲免费中文 | 欧美freesex呦交中文 | 国产精品久久久久久久久久一区 | 一级做a免费视频观看网站 一级做a爰片久久毛片 | xxxxx性欧美| 亚洲区小说区激情区图片区 | 极品久久 | 春色激情站 | 亚洲成人精品久久 | 亚洲欧美日韩国产一区二区精品 | 国产成人精选免费视频 | 一级做a爰性色毛片免费 | a天堂视频| 亚洲国产精品一区二区三区 | 天天天天鲁天天拍一拍 | 有码在线视频 | 一本久道久久综合中文字幕 | 中文字幕乱码在线 | 国产成人高清 | xxxxx国产| 亚洲好逼 | 91精品久久久久久久久网影视 |