版本: v2.3.0
query
執行自訂原生 SQL 查詢,並支援綁定參數。
query($query, $map)
query [string]
要執行的 SQL 查詢敘述。
map [array] (可選)
預備語句的綁定參數值。
回傳值
[PDOStatement] 已執行查詢的 PDOStatement 實例。
Medoo 產生的查詢遵循 SQL-92 語法。撰寫原生 SQL 時,請確保值已正確加上引號,並盡量優先使用預備語句,以降低 SQL 注入風險。
$database->query("CREATE TABLE account_storage (
c1 INT STORAGE DISK,
c2 INT STORAGE MEMORY
) ENGINE NDB;");
$data = $database->query("SELECT email FROM account")->fetchAll();
print_r($data);
識別字引用語法
原生 SQL 表達式支援對資料表名稱與欄位名稱使用簡寫引用,並能處理資料表前綴。使用
<name> 標記識別字後,Medoo 會將其解析為正確加上引號的資料表名稱或欄位名稱(包括已設定的前綴)。$data = $database->query("SELECT <email> FROM <account>")->fetchAll();
// 轉換後的 SQL:
// SELECT "email" FROM "account"
// 如果設定了資料表前綴,查詢會變成:
$database = new Medoo([
// ...
"prefix" => "WP_"
]);
$data = $database->query("SELECT <account.email>,<account.nickname>
FROM <account>
WHERE <id> != 100
")->fetchAll();
SELECT "WP_account"."email", "WP_account"."nickname" FROM "WP_account" WHERE "id" != 100
預備語句
query() 也支援預備語句。Medoo 會自動偵測綁定輸入值的參數型別。$data = $database->query( "SELECT * FROM <account> WHERE <user_name> = :user_name AND <age> = :age", [ ":user_name" => "John Smith", ":age" => 20 ] )->fetchAll(); print_r($data);