Ошибка SQL: 1064 У вас есть ошибка в синтаксисе SQL - PullRequest
0 голосов
/ 13 июня 2018

У меня есть таблица с такими именами пользователей:

    ____         ____            __________        _____________
   |    |       |     |          |         |       |           |
   | 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 = ?'

Я использую этот метод, так как не знаю, какое условие было выбрано, поэтому я зависим от имени.

1 Ответ

0 голосов
/ 13 июня 2018

Вы не можете передавать имена столбцов (или другие идентификаторы) в качестве параметров.Вот альтернативный метод, который не требует манипулирования строкой запроса:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...