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