Ошибка MySQL # 1064 в предложении WHERE

0

Детали

  • Mac OS X Snow Leopard 10.6.7
  • Версия MAMP 1.7.2
  • Версия PHP 5.3.4
  • MySQL 5.0.41
  • Тип таблицы: MyISAM
  • Кодировка: Unicode UTF-8 (utf8)
  • Сортировка: utf8_unicode_ci

Основной запрос MySQL "INSERT":

$startMonth = $date->getMonth();
$startDay = $date->getDay();
$startYear = $date->getYear();
$startTime = $date->getTime();

$query = sprintf("INSERT INTO todos 
                  VALUES (startMonth, startDay, startYear, startTime)
                  VALUES (%d, %d, %d, %d)
                   WHERE todo = '%s'",
                  mysql_real_escape_string($startMonth),
                  mysql_real_escape_string($startDay),
                  mysql_real_escape_string($startYear),
                  mysql_real_escape_string($startTime),
                  mysql_real_escape_string($todo));

$result = mysql_query($query) or die("A MySQL error has occurred.<br />Your Query: " . $q . "<br /> Error: (" . mysql_errno() . ") " . mysql_error());

Вот mysql_error, который печатает:

Произошла ошибка MySQL.
Ваш запрос:
INSERT INTO todos SET startMonth = 6 И startDay = 27 И startYear = 2011 AND> startTime = 1309216538 WHERE todo = todo 2
Ошибка: (1064) У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с "WHERE todo = todo 2" в строке 1

Я пробовал все возможное, о чем я могу думать. Изменяя запрос на "INSERT INTO todos SET startMonth..." и т.д.

Я закодировал переменную $todo всеми возможными способами (например, addslashes, magic_quotes_pgc (даже несмотря на то, что она устарела... я получал отчаяние), htmlentities, mysql_real_escape_string... все, что я мог найти и/или думать).

  • 1
    Перезапись существующих значений означает, что вам нужно использовать оператор UPDATE, а не INSERT ...
  • 0
    Ваша ошибка отображает $q но ваш запрос хранится в $query
Показать ещё 1 комментарий
Теги:
mysql-error-1064

3 ответа

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

В соответствии с документацией MySQL вы не можете использовать предложение WHERE в INSERT. У вас также есть 2 предложения VALUES. Похоже, что ваше первое предложение VALUES определяет поля, которые вы вставляете, а не значения.

Если вы пытаетесь вставить INSERT, то вы захотите сделать это:

$query = sprintf("INSERT INTO todos (todo, startMonth, startDay, startYear, startTime)
                  VALUES ('%s', %d, %d, %d, %d)",
                  mysql_real_escape_string($todo)
                  mysql_real_escape_string($startMonth),
                  mysql_real_escape_string($startDay),
                  mysql_real_escape_string($startYear),
                  mysql_real_escape_string($startTime));
  • 0
    Чего бы я не дал, чтобы иметь вторую пару глаз вокруг :). Спасибо всем. Ты фантастический! Мой первый раз здесь ... как мне пометить это как "ответил"?
  • 0
    @tchnchn - через 15 минут после публикации вопроса вы сможете принять ответ, нажав на зеленую галочку слева от моего ответа. См. Как работает принятие ответа? для дополнительной информации.
1
INSERT INTO todos SET startMonth = 6 AND startDay = 27 AND startYear = 2011 AND >startTime = 1309216538 WHERE todo = todo 2 

должно быть

UPDATE todos SET startMonth = 6, startDay = 27, startYear = 2011 WHERE startTime = 1309216538 AND todo = 2;

Вы путаетесь с правильным синтаксисом для оператора обновления. И является логическим оператором. Вы должны использовать запятые, когда присваиваете значение через инструкцию по обновлению. INSERT! = ОБНОВЛЕНИЕ.

Это, и есть некоторые другие сумасшедшие вещи, связанные с вашим выражением. В любом случае, второе утверждение должно работать до тех пор, пока правильное имя/схема

1

Помимо двух ошибок в INSERT которые объяснил Франсуа, вы запускаете один ($query) и печатаете другое ($q):

$result = mysql_query($query)                                  --- $query is not 
or die("A MySQL error has occurred.<br />Your Query: " . $q    --- same with $q
  . "<br /> Error: (" . mysql_errno() . ") " . mysql_error());

Ещё вопросы

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