ThinkPHP內置的ORM和ActiveRecord模式實現了方便的數據存取操作,而且新版增加的連貫操作功能更是讓這個數據操作更加清晰,但是ThinkPHP仍然保留了原生的SQL查詢和執行操作支持,為了滿足復雜查詢的需要和一些特殊的數據操作,SQL查詢的返回值因為是直接返回的Db類的查詢結果,沒有做任何的處理。
主要包括下面兩個方法:
1、query方法
query方法用於執行SQL查詢操作,如果數據非法或者查詢錯誤則返回false,否則返回查詢結果數據集(同select方法)。
使用示例:
-
$Model = new \Think\Model() // 實例化一個model對象 沒有對應任何數據表 $Model->query("select * from think_user where status=1");
如果你當前采用了分布式數據庫,並且設置了讀寫分離的話,query方法始終是在讀服務器執行,因此query方法對應的都是讀操作,而不管你的SQL語句是什么。
可以在query方法中使用表名的簡化寫法,便於動態更改表前綴,例如:
-
$Model = new \Think\Model() // 實例化一個model對象 沒有對應任何數據表 $Model->query("select * from __PREFIX__user where status=1"); // 3.2.2版本以上還可以直接使用 $Model->query("select * from __USER__ where status=1");
和上面的寫法等效,會自動讀取當前設置的表前綴。
2、execute方法
execute用於更新和寫入數據的sql操作,如果數據非法或者查詢錯誤則返回false ,否則返回影響的記錄數。
使用示例:
-
$Model = new \Think\Model() // 實例化一個model對象 沒有對應任何數據表 $Model->execute("update think_user set name='thinkPHP' where status=1");
如果你當前采用了分布式數據庫,並且設置了讀寫分離的話,execute方法始終是在寫服務器執行,因此execute方法對應的都是寫操作,而不管你的SQL語句是什么。
也可以在execute方法中使用表名的簡化寫法,便於動態更改表前綴,例如:
-
$Model = new \Think\Model() // 實例化一個model對象 沒有對應任何數據表 $Model->execute("update __PREFIX__user set name='thinkPHP' where status=1"); // 3.2.2版本以上還可以直接使用 $Model->execute("update __USER__ set name='thinkPHP' where status=1");
和上面的寫法等效,會自動讀取當前設置的表前綴。
摘自:ThinkPHP3.2完全開發手冊