PDO是PDO, Mysqli是Mysqli,我們沒辦法要求PDO像Mysqli保持一樣的結(jié)構(gòu)和設(shè)計(jì)。
也許你會(huì)覺得mysqli的fetch_field很方便,但是實(shí)際上這個(gè)方法的使用概率極低,因?yàn)橥ǔ?huì)讀出表的所有字段信息并緩存起來(lái),而不是總是進(jìn)行字段查詢。
表現(xiàn)最明顯的框架如Cakephp,當(dāng)你用直接編輯數(shù)據(jù)表的方法增加了一個(gè)新字段之后數(shù)據(jù)并不會(huì)被保存到這個(gè)字段中,必須先清除緩存的數(shù)據(jù)表信息才行。
通過(guò)閱讀不同的PHP框架,我們可以發(fā)現(xiàn)極少會(huì)有框架需要開發(fā)人員直接調(diào)用PDO或者mysqli對(duì)象去執(zhí)行sql,它們往往將其通過(guò)DbAdapter之類的接口進(jìn)行封裝。我建議你思考這樣做的好處然后優(yōu)化自己的代碼結(jié)構(gòu)。你問題中的這個(gè)行為通常也不需要封裝在db對(duì)象中,一般是在Table對(duì)象處理,例如
class Table {
protected $_tableName;
public function __construct($tableName);
protected function _readFieldsPrototype();
protected function _();
public function getFieldPrototype($filed);
}
PDO是PDO, Mysqli是Mysqli,我們沒辦法要求PDO像Mysqli保持一樣的結(jié)構(gòu)和設(shè)計(jì)。
也許你會(huì)覺得mysqli的fetch_field很方便,但是實(shí)際上這個(gè)方法的使用概率極低,因?yàn)橥ǔ?huì)讀出表的所有字段信息并緩存起來(lái),而不是總是進(jìn)行字段查詢。表現(xiàn)最明顯的框架如Cakephp,當(dāng)你用直接編輯數(shù)據(jù)表的方法增加了一個(gè)新字段之后數(shù)據(jù)并不會(huì)被保存到這個(gè)字段中,必須先清除緩存的數(shù)據(jù)表信息才行。
通過(guò)閱讀不同的PHP框架,我們可以發(fā)現(xiàn)極少會(huì)有框架需要開發(fā)人員直接調(diào)用PDO或者mysqli對(duì)象去執(zhí)行sql,它們往往將其通過(guò)DbAdapter之類的接口進(jìn)行封裝。我建議你思考這樣做的好處然后優(yōu)化自己的代碼結(jié)構(gòu)。
你問題中的這個(gè)行為通常也不需要封裝在db對(duì)象中,一般是在Table對(duì)象處理,例如class Table {protected $_tableName;public function __construct($tableName);protected function _readFieldsPrototype();protected function _();public function getFieldPrototype($filed);}。
ThinkPHP內(nèi)置的ORM和ActiveRecord模式實(shí)現(xiàn)了方便的數(shù)據(jù)存取操作,而且新版增加的連貫操作功能更是讓這個(gè)數(shù)據(jù)操作更加清晰,但是ThinkPHP仍然保留了原生的SQL查詢和執(zhí)行操作支持,為了滿足復(fù)雜查詢的需要和一些特殊的數(shù)據(jù)操作,SQL查詢的返回值因?yàn)槭侵苯臃祷氐腄b類的查詢結(jié)果,沒有做任何的處理。而且可以支持查詢緩存。主要包括下面兩個(gè)方法:
1、query方法
query方法是用于sql查詢操作,和select一樣返回?cái)?shù)據(jù)集,例如:
$Model = new Model() // 實(shí)例化一個(gè)model對(duì)象 沒有對(duì)應(yīng)任何數(shù)據(jù)表
$Model->query("select * from think_user where status=1");
2、execute方法
用于更新和寫入數(shù)據(jù)的sql操作,返回影響的記錄數(shù),例如:
$Model = new Model() // 實(shí)例化一個(gè)model對(duì)象 沒有對(duì)應(yīng)任何數(shù)據(jù)表
$Model->execute("update think_user set name='thinkPHP' where status=1");
關(guān)于原生SQL操作的一點(diǎn)補(bǔ)充
通常使用原生SQL需要手動(dòng)加上當(dāng)前要查詢的表名,如果你的表名以后會(huì)變化的話,那么就需要修改每個(gè)原生SQL查詢的sql語(yǔ)句了,針對(duì)這個(gè)情況,TP還提供了一個(gè)小的技巧來(lái)幫助解決這個(gè)問題。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁(yè)面生成時(shí)間:3.472秒