sql错误:1064您的sql语法有错误

i34xakig  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(414)

我有一个名为users的表,如下所示:

____         ____            __________        _____________
   |    |       |     |          |         |       |           |
   | id |       | name|          |firstCon |       | secondCon |
   |____|       |_____|          |________ |       |___________|

     1           john               true               false

     2           mark               false              false

我想换衣服 firstCon 以及 secondCon 价值观 true 或者 false .
所以我使用以下查询:

$sql = "UPDATE users SET ? = ? WHERE name = ?";
$query->bind_param($condition, $value, $name);

哪里 $condition 或者 firstCon 或者 secondCon , $value = true/false , $name 是用户的名称。
我得到一个错误:

1064 You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version 
for the right syntax to use near '? = ? WHERE name = ?'

我使用这个方法,因为我不知道选择了哪个条件,所以我依赖于名称。

ncgqoxb0

ncgqoxb01#

不能将列名(或其他标识符)作为参数传递。下面是一个不需要对查询字符串进行mung的替代方法:

UPDATE users 
    SET firstcon = (case when ? = 'firstcon' then ? else firstcon end),
        secondcon = (case when ? = 'secondcon' then ? else secondcon end)
    WHERE name = ?;

注意:这有更多的占位符。如果将参数作为命名参数传入,可能会更简单:

UPDATE users 
    SET firstcon = (case when :which = 'firstcon' then :value else firstcon end),
        secondcon = (case when :which = 'secondcon' then :value else secondcon end)
    WHERE name = :name;

相关问题