Синтаксическая ошибка MySQL

0
$sql = "UPDATE galleries SET name='$name', desc='$desc', mainthumb='$mt' 
        WHERE id='$id'";

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

Я подтвердил, что все значения публикуются. Что еще хуже, это почти точная копия любого запроса, который отлично работает.

Update:

Это было решено. Это был факт, что desc не имел обратных ссылок. Я также собираюсь использовать PDO, как было предложено.

Теги:

6 ответов

7
Лучший ответ

Является ли desc не ключевым словом, которое нельзя использовать в качестве имени столбца?

  • 0
    Я только что попробовал SELECT desc FROM Table1 не удалось, но процитировал это успешно.
  • 3
    Да действительно. dev.mysql.com/doc/refman/5.0/ru/reserved-words.html - обратите внимание, что со многими (всеми?) из этих зарезервированных слов, если вы окружаете имя столбца обратными метками (что вы должны делать в любом случае imho) это будет работать просто отлично.
Показать ещё 1 комментарий
7

У вас есть столбец с именем desc, который является зарезервированное слово. Вам нужно будет процитировать его с помощью обратных ссылок.

`desc`='$desc'
4

Вы дезактивировали все параметры, прежде чем смешивать их с оператором sql?
desc является зарезервированное слово в MySQL, вы должны явно отметьте его как идентификатор:

Идентификатор может быть указан или не определен. Если идентификатор содержит специальные символы или зарезервированное слово, вы должны указывать его всякий раз, когда вы ссылаетесь на него. [...]

Символом кавычки идентификатора является обратная сторона ( "`" ):
$mysql = mysql_connect(...

$sql = "
    UPDATE
        galleries
    SET
        name='" . mysql_real_escape_string($_POST['name'], $mysql) . "',
        `desc`='" . mysql_real_escape_string($_POST['desc'], $mysql) . "',
        mainthumb='"  . mysql_real_escape_string($_POST['mt'], $mysql) . "' 
  WHERE
    id='"  . mysql_real_escape_string($_POST['id'], $mysql) . "'
 ";

или даже лучше: использовать подготовленные отчеты

  • 0
    +1 за подготовленные высказывания и mysqli .
  • 1
    на самом деле я имел в виду pdo ;-) ссылка добавлена
1

echo $sql и посмотреть, что это на самом деле. Это похоже на легкую цель для SQL-инъекции, если вы не позаботились об этом.

0
$sql = "UPDATE `galleries` SET 
           name='".$name."', 
           desc='".$desc."', 
           mainthumb='".$mt."' 
        WHERE id='".$id."'";

Это может быть один из альтернативных способов обработки. Хотя я бы пошел PDO, как сказал VolkerK. Я также хотел бы Эхо посмотреть, что он будет выводить. Также, как предположил Бен, Desc может быть зарезервированным словом.

0

да, убедитесь, что вы сначала дезинфицируете данные, используя mysql_real_escape_string.

Затем повторите ошибку mysql (mysql_error()), это даст вам больше подсказок о том, где ошибка,

<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password");

mysql_select_db("nonexistentdb", $link);
echo mysql_errno($link) . ": " . mysql_error($link). "\n";

mysql_select_db("kossu", $link);
mysql_query("SELECT * FROM nonexistenttable", $link);
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
?>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню