2015-09-03 5 views
-1

Я получил следующее сообщение: mysql_error(). Я получаю это время от времени и могу понять их, просто взглянув на мой синтаксис.Как устранить проблему mysql_error()?

У вас возникла ошибка в синтаксисе SQL; в руководстве, соответствует версии сервера MySQL для правильного синтаксиса, чтобы использовать вблизи «ключ, ярлык, значение, описание, LAST_MODIFIED, имя пользователя, FilePath, DIVID) Сел» в строке 1

Но теперь У меня есть ошибка, которую я не могу решить, поэтому я собираюсь задать довольно простой вопрос. Как интерпретировать сообщение mysql_error() В частности, когда он говорит «рядом».

  • Недалеко от чего?
  • Где именно я выгляжу?

    • В переднем конце запроса и того, что предшествует ему?
    • Или конец запроса запроса и того, что следует за ним?

Вот мое фактическое утверждение запроса в PHP:

mysqli_query($link, ' 
    INSERT INTO ' . DATASTORE . '(key, label, value, description, last_modified, username, filepath, divid) 
    SELECT key, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'" 
    FROM ' . DATASTORE . ' 
    WHERE divid = "' . $source_divid . '" 
') or die(mysqli_error($link)); 
+0

вы проверили каждый из. переменные значения? –

+0

Да, я @Jezzabeanz. Столбцы таблицы - это все текстовые поля, а все вары заполнены строковым текстом. Итак, вы полагаете, что мне нужно смотреть на сторону SELECT запроса и то, что следует за ней, чтобы точно определить синтаксическую ошибку? –

+0

Я бы посмотрел на сторону INSERT запроса. Я всегда ненавидел ошибки MySQL.Когда я смотрю на вашу ошибку, это заставляет меня думать «хорошо, так что это ломается на« ключ ». Является ли ваш Datastore не нулевым, только текст? –

ответ

1

Я думаю, что это из-за вашего поля «ключа», который является SQL ключевое слово использовать «» или `` процитировать это поле

mysqli_query($link, ' 
INSERT INTO ' . DATASTORE . '(\'key\', label, value, description, last_modified, username, filepath, divid) 
SELECT \'key\', label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'" 
FROM ' . DATASTORE . ' 
WHERE divid = "' . $source_divid . '"') or die(mysqli_error($link)); 
+0

Разве это не обратная сторона «вместо одной цитаты»? –

+0

Ах блестящий @ Perl99. Я не могу подсчитать количество раз, когда я сработал, используя зарезервированное ключевое слово MySQL. Похоже, это еще один из тех времен. Я просто преследовал ошибку, которая на самом деле не была синтаксической * ошибкой ... это было мое использование определенного зарезервированного имени столбца. Я проверю его и отправлю обратно и выберите это как ответ. Благодаря! –

+0

Это сработало. как только я помещаю backticks вокруг столбца * key * на строки INSERT и SELECT в запросе, это сработало! Опять же, я сработал с использованием зарезервированного ключевого слова MySQL. Тьфу. –

1

Если бы это было так легко ... Я предполагаю, что есть только так много информации MySQL может дать вам. Мой совет состоит в том, чтобы просто использовать сообщение в качестве руководства относительно того, где ошибка.

Я бы использовал отладчик или просто откликнул sql out, а затем использовал инструмент базы данных, например SQLyog, для запуска запроса. SQLYog (или что-то подобное) может форматировать запрос, чтобы сделать его более читаемым. Ошибка может быть любой из опечатки, чтобы скобка не закрывалась должным образом.

Как и все, он просто приходит с практикой.

+0

Да, я знаю, но я никогда не мог понять, когда он говорит «ближе». .. это означает *** до ***, или *** после *** или это может быть *** или ***? –

1

Ваша ошибка в значении DATASTORE. Когда вы видите, что mysql говорит «рядом», это означает прежде. Итак, посмотрите, что такое значение DATASTORE, когда вы получаете ошибку. Попробуйте выполнить эхо-запрос вместо его выполнения, чтобы увидеть, как он выглядит, и вы получите сообщение об ошибке. В вашей ситуации ошибка в том, что не существует пространство между DATASTORE и (. Кроме того, как Perl и другой отметила, вы должны ключу кавычки, так как это зарезервированное слово для MySQL

Так редактировать ваш запрос таким образом, и она должна работать:

mysqli_query($link, ' 
    INSERT INTO ' . DATASTORE . ' (`key`, label, value, description, last_modified, username, filepath, divid) 
    SELECT `key`, label, "' . $new_value . '", description, "' . $last_modified .'", "' . $authorized_username .'", "' . $new_filepath .'", "' . $target_divid .'" 
    FROM ' . DATASTORE . ' 
    WHERE divid = "' . $source_divid . '" 
') or die(mysqli_error($link)); 
+0

Спасибо @LelioFaieta. На самом деле это *** *** *** часть сообщения об ошибке, о котором мне сообщала MySQL. –

+0

Рад, что вы решили свою проблему –

Смежные вопросы