在 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' ]) ;