Ошибка SQL: 1064 У вас есть ошибка в синтаксисе SQL

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

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

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

Вы не можете использовать заполнитель для идентификатора столбца

John Conde 13.06.2018 17:04

какая-либо причина, по которой вы хотите привязать имена столбцов? Также к вашему сведению, вы не можете этого сделать

Rotimi 13.06.2018 17:05

Возможный дубликат Как исправить ошибку MySQL # 1064?

Daniel W. 13.06.2018 17:06

@AkintundeOlawale, эти значения условий поступают из входов, я не знаю, какой из них был нажат, тогда я просто знаю имя и имя условия, поэтому я не могу просто поместить туда статический столбец, так как я не знаю, какой из них из них следует обновить

user9929968 13.06.2018 17:12

это плохая идея - собирать имена таблиц и / или столбцов через форму или любой пользовательский ввод. Вам следует поискать альтернативу. Может быть, вам также стоит добавить к своему вопросу конечную цель?

Rotimi 13.06.2018 17:15

@AkintundeOlawale, Моя конечная цель - обновить таблицу с выбранным условием

user9929968 13.06.2018 17:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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;

Я попробовал первый и добавил третье условие, но он выдает ошибку

user9929968 13.06.2018 17:18

а второй дал мне эту ошибку с 3 условиями: :which = 'firstcon' then :value else firstcon end), secondcon = (case when :which =' at line 2

user9929968 13.06.2018 17:56

Спасибо проблема решена, я пользовался первым, но в конце второй проверки должен быть end

user9929968 13.06.2018 19:41
UPDATE users SET firstcon = (case when ? = 'firstcon' then ? else firstcon end), secondcon = (case when ? = 'secondcon' then ? else secondcon end) WHERE name = ?
user9929968 13.06.2018 19:42

Другие вопросы по теме