ОБНОВИТЬ набор таблиц 1 = ‘yes’, ГДЕ id = ‘$userId'» не работает

#php #mysql #sql

#php #mysql #sql

Вопрос:

У меня есть следующий код:

 $updateCode = mysql_query("UPDATE pages SET pageCode='$code' WHERE id='$userID' AND pageOrder='1'");

$updateProgress = mysql_query("UPDATE progress SET 1='yes' WHERE id='$userID'");

$updateRewards = mysql_query("UPDATE earnedRewards SET 1='yes' WHERE id='$userID'");
 

Первое ОБНОВЛЕНИЕ работает просто отлично, и pages таблица обновляется. Однако вторые два ОБНОВЛЕНИЯ не работают, и столбец 1 в progress и earnedRewards не обновляется до ‘yes’.

Есть мысли о том, почему не работают вторые два ОБНОВЛЕНИЯ?

Комментарии:

1. добавьте «или die(mysql_error ())» после ваших запросов — это покажет вам, есть ли у вас какие-либо ошибки в вашем запросе

2. Ваш столбец называется «1»? Меня удивляет, что это разрешено.

3. Действительно ли у вас имя столбца 1? Вам следует подумать о том, чтобы изменить его на что-то другое, более подробное объяснение. И вы уверены, что ваш $userId правильный? Что происходит при выполнении этого запроса в phpMyAdmin (или аналогичном)?

4. @MarkRummel Пожалуйста, имейте в виду, что этот код уязвим (или может быть) для SQL-инъекций. Вам нужно убедиться, что $userID это очищено (например, приведено к int или экранировано).

5. Даже если столбец с именем «1», вы UPDATE не пытаетесь получить к нему доступ, а скорее пытаетесь переназначить целое число 1 .

Ответ №1:

Имя столбца равно 1??? Вы должны изменить имя столбца

Комментарии:

1. Я изменил название столбца, чтобы оно начиналось с буквы, и все работало просто отлично. Спасибо!

Ответ №2:

Если 1 действительно является именем вашего столбца, вам нужно будет экранировать его с помощью обратных меток.

 UPDATE progress SET `1`='yes' WHERE id='$userID'
 

Если вы пытаетесь ссылаться на столбец позиционно (т. Е. На Первый столбец таблицы), не делайте этого. Используйте имя столбца.

Комментарии:

1. Возможно ли вообще иметь столбец с именем 1 ? Если да: о чем, черт возьми, вы думали, MySQL-разработчики !?

2. @middus: Это возможно. Цитирую документацию : «Идентификаторы могут начинаться с цифры, но, если они не указаны, могут состоять не только из цифр».

3. Серьезно, зачем кому-то разрешать это? Это просто крушение поезда, которое вот-вот произойдет.

4. @middus: Я согласен, что это ужасное название колонки. Но если что-то можно сделать, я гарантирую вам, что кто-то это сделает.

5. @JoeStefanelli Спасибо! Я изменил имя столбца, чтобы оно начиналось с буквы, и теперь все работает.