У меня есть таблица с такими пользователями:
____ ____ __________ _____________
| | | | | | | |
| 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 = ?'
Я использую этот метод, так как не знаю, какое условие было выбрано, поэтому я зависим от имени.
какая-либо причина, по которой вы хотите привязать имена столбцов? Также к вашему сведению, вы не можете этого сделать
Возможный дубликат Как исправить ошибку MySQL # 1064?
@AkintundeOlawale, эти значения условий поступают из входов, я не знаю, какой из них был нажат, тогда я просто знаю имя и имя условия, поэтому я не могу просто поместить туда статический столбец, так как я не знаю, какой из них из них следует обновить
это плохая идея - собирать имена таблиц и / или столбцов через форму или любой пользовательский ввод. Вам следует поискать альтернативу. Может быть, вам также стоит добавить к своему вопросу конечную цель?
@AkintundeOlawale, Моя конечная цель - обновить таблицу с выбранным условием






Вы не можете передавать имена столбцов (или другие идентификаторы) в качестве параметров. Вот альтернативный метод, который не требует изменения строки запроса:
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;
Я попробовал первый и добавил третье условие, но он выдает ошибку
а второй дал мне эту ошибку с 3 условиями: :which = 'firstcon' then :value else firstcon end), secondcon = (case when :which =' at line 2
Спасибо проблема решена, я пользовался первым, но в конце второй проверки должен быть end
UPDATE users SET firstcon = (case when ? = 'firstcon' then ? else firstcon end), secondcon = (case when ? = 'secondcon' then ? else secondcon end) WHERE name = ?
Вы не можете использовать заполнитель для идентификатора столбца