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