在 sql 中为变量使用命名参数
using named parameters for variables in sql
我的代码不工作我做错了什么,是否可以为密钥使用命名参数。我正在尝试在不进行硬编码的情况下为 sql"where username = aaron " 中的变量部分赋值,如果不能,请问如何实现
$select = $conn->prepare("SELECT * FROM users WHERE :key = :username ") ;
$select->execute([":key"=> "username", ":username"=> 'aaron' ]) ;
它不起作用,因为它将用 "username" 代替 :key 而不是用户名,因此您的查询最终将成为 :
SELECT * FROM users WHERE 'username' = 'aaron'
SQL 绑定最初用于替换变量(变化的事物)而不是常量(本例中的列名)。
如果您仍然想做类似的事情,您将需要自己编写一些代码,而不是使用 ->execute 方法。
解决方案
$key = "username" ;
$select = $conn->prepare("SELECT * FROM users WHERE $key = :username ") ;
$select->execute([ ":username"=> 'aaron' ]) ;
我的代码不工作我做错了什么,是否可以为密钥使用命名参数。我正在尝试在不进行硬编码的情况下为 sql"where username = aaron " 中的变量部分赋值,如果不能,请问如何实现
$select = $conn->prepare("SELECT * FROM users WHERE :key = :username ") ;
$select->execute([":key"=> "username", ":username"=> 'aaron' ]) ;
它不起作用,因为它将用 "username" 代替 :key 而不是用户名,因此您的查询最终将成为 :
SELECT * FROM users WHERE 'username' = 'aaron'
SQL 绑定最初用于替换变量(变化的事物)而不是常量(本例中的列名)。
如果您仍然想做类似的事情,您将需要自己编写一些代码,而不是使用 ->execute 方法。
解决方案
$key = "username" ;
$select = $conn->prepare("SELECT * FROM users WHERE $key = :username ") ;
$select->execute([ ":username"=> 'aaron' ]) ;