版本: 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);