тайна mysql ошибка - PullRequest
       23

тайна mysql ошибка

1 голос
/ 23 января 2010

Я ни в коем случае не имею опыта работы с MySQL и получаю сообщение об ошибке в следующих строках кода:

$sql= "INSERT INTO songs (unique_show_id, artist, date, year, city, state, venue, taper, transfered_by, source, mic_loc, lineage, uploaded_by, uploaded_on, show_notes, show_xml)
            VALUES('$showId', '$artist', '$showDate', '$year, '$city', '$state', '$venue', '$taper', '$transferer', '$source', '$mic_loc', '$lineage', '$uploader', NOW(), '$show_notes', '$show_xml')";    

//check to see if the query went through
            if (!mysql_query($sql,$con)){
              echo "query fail";
            die('Error: ' . mysql_error());
    }

Я уверен, что это что-то упрощенное, но я не вижу, где ошибка. Я получаю сообщение об ошибке:

query failError: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ipuhgbi', 'CA', '', '', '', '', '', '', 'danwoods', NOW(), '', '<show id=\'gm198' at line 2  

Некоторые значения, которые я вставляю, имеют значение NULL, но из того, что я прочитал, я не думаю, что это должно быть проблемой. Есть идеи?

Ответы [ 4 ]

4 голосов
/ 23 января 2010

Отсутствует цитата после $year.

Когда MySQL выдает такую ​​ошибку (рядом с бла ди бла), ошибка обычно происходит непосредственно перед строкой, которую он упоминает. В этом случае «ipuhgbi» отображается на $ city, так что вы знаете, что это прямо перед «$ city», и что мы там видим? Вуаля, пропущенная цитата.

0 голосов
/ 23 января 2010

Похоже, что последняя одинарная кавычка в строке ошибки не экранирована.

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

0 голосов
/ 23 января 2010

Есть несколько вещей, в которых вы должны быть уверены:

  1. Вы не вставляете первичные ключи через запросы (например, unique_show_id в вашем коде)
  2. Для чисел вы не используете одинарные кавычки.
  3. Лучше использовать заданный вариант вставки записей, чтобы избежать проблем с подсчетом, например:
  4. Используйте intval для чисел и mysql_real_escaps_string для строк, чтобы избежать проблем с инъекциями, а также ошибок запроса в одинарных кавычках.

    вставить в набор таблиц field = 'field_value', field2 = 'field_value' // и т. Д.

0 голосов
/ 23 января 2010

Вам нужно использовать mysql_real_escape_string() в каждой отдельной переменной $.

Кроме того, внимательно прочитайте этот вопрос StackOverflow относительно SQL-инъекций .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...