怎麼在thinkphp裡面執行原生的sql語句?
$Model = new Model();//或者 $Model = D(); 或者 $Model = M(); $sql = "select * from `order`"; $voList = $Model->query($sql);
只是需要new一個空的模型繼承Model中的方法。
注意query是查功能,execute是增刪改功能
##查詢與讀取屬性值的實例:$sql = "select * from goods"; $Model = M(); $result = $Model->query($sql); foreach ($result as $k=>$val){ $goods_id = $val["goods_id"]; }tP的模型可以支援原生SQL操作,提供了query和execute兩個方法,為什麼原生SQL還要區分兩個方法呢,原因有兩個:
1、傳回類型不同
query用於查詢,傳回的是資料集,和select或findall一樣,所以可以直接在範本裡面使用volist標籤輸出query的查詢結果
execute用來寫操作,傳回的是狀態或影響的記錄數
2、讀寫統計需要
為了方便統計目前的資料讀寫次數,把資料庫的讀寫操作分開(對應的就是query和execute)使用原生SQL很簡單,我們甚至不需要實例化任何的模型,例如:$Model = new Model(); // 实例化一个空模型下面的方法是等效的
#
$Model = D();// 或者 $Model = M(); // 下面执行原生SQL操作 $Model->query('select * from think_user where status=1'); $Model->execute('update think_user set status=1 where id=1');如果你實例化了某個模型,仍然可以執行原生SQL操作,不受影響,例如:
$User = D('User'); $User->query('select * from think_user where status=1'); $User->execute('update think_user set status=1 where id=1');在這種情況下面,我們可以簡化SQL語句的寫法,例如:
$User->query('select * from __TABLE__ where status=1'); $User->execute('update __TABLE__ set status=1 where id=1');系統會自動把
__TABLE__替換成目前模型對應的資料表名稱,實際的數據表由模型決定。
通常來說,我們都是使用原生SQL運算實作一些ORM和CURD比較難實現的操作,另外,如果SQL不複雜的話原生SQL的效率和連貫操作的效率差異是微乎其微的,TP本身的ORM實作也是相當有效率的。
以上是thinkphp執行原生SQL語句的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!