首頁  >  文章  >  後端開發  >  thinkphp執行原生SQL語句的實作方法

thinkphp執行原生SQL語句的實作方法

黄舟
黄舟原創
2017-10-26 09:29:471679瀏覽

怎麼在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn