Получение 1064 Ошибка в MySQL, но запрос все еще завершается? Не уверен почему!

0

Я пытаюсь вставить много полей в базу данных MySQL, некоторые из них терпят неудачу, поэтому я добавляю код в свой PHP script, чтобы попытаться отследить, что происходит.

Замена, похоже, работает, поскольку я могу видеть, что поля заполняются в mysql, но я получаю эту ошибку:

1064: У вас есть ошибка в вашем SQL синтаксис; проверьте руководство, которое соответствует вашему серверу MySQL версии для правильного синтаксиса для использования рядом с '1' на линии 1

//insert query
if (strlen($link_name)>0)
{
$query = mysql_query("REPLACE into jos_mt_links
(link_id, link_name, alias, link_desc, user_id, link_approved, metadesc, link_created, link_modified, website, price)
VALUES ('$link_id','$link_name','$link_name','$description','63','1','$metadesc','$link_created','$link_modified','$website','$cost')");
echo $link_name . "has been inserted <br />";
print "SQL-Query: ".$query."<br>";

    if(mysql_query($query,$db))
   {
    echo "<center><font face='$fonts' size=2 color='$green'>";
    echo " OK !</font><br><br>\n";
   }
  else
   {
    echo "<center><font face='$fonts' size=3 color='$red'>";
    echo "Error<br><br>";
       echo mysql_errno() . ":" . mysql_error() . "</font><br>\n";
   }
  • 0
    Правильно ли экранированы все строковые значения (например, $ link_id, $ link_name и т. Д.)?
Теги:
mysql-error-1064

1 ответ

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

В вашем SQL нет ничего плохого. Вы назначаете $query результат вашего вызова mysql_query():

$query = mysql_query("REPLACE into jos_mt_links
    (link_id, link_name, alias, link_desc, user_id, link_approved, metadesc,
    link_created, link_modified, website, price)
    VALUES
    ('$link_id','$link_name','$link_name','$description','63','1','$metadesc','$link_created','$link_modified','$website','$cost')");

mysql_query() возвращает true или false в результате запроса REPLACE, но тем важнее то, что вы назначаете результат, а не запрос SQL, который вы выполняете.

Кроме того, здесь:

if(mysql_query($query,$db))

Вы снова вызываете mysql_query() в той же переменной $query, которая теперь содержит значение true (поскольку вы сказали, что ваш запрос работает, и ваша база данных обновляется нормально). PHP интерпретирует boolean true как строку '1', и вы говорите MySQL для запуска запроса с именем 1, который дает эту ошибку.

Вы, вероятно, хотели бы назначить $query, как это, вместо этого, чтобы ваше условие if работало правильно:

$query = "REPLACE into jos_mt_links
    (link_id, link_name, alias, link_desc, user_id, link_approved, metadesc,
    link_created, link_modified, website, price)
    VALUES
    ('$link_id','$link_name','$link_name','$description','63','1','$metadesc','$link_created','$link_modified','$website','$cost')";

И вызов вашего echo внутри оператора if.

Другое дело: как заметил Марк Бейкер, убедитесь, что ваши переменные были экранированы с помощью mysql_real_escape_string(), прежде чем вставлять их непосредственно в ваш SQL.

  • 0
    Спасибо, это имеет смысл. Не могли бы вы уточнить, как я проверяю, использую ли я mysql_real_escape_string ()? При проверке выясняется, что записи, потерпевшие неудачу, имеют апостроф в описании. то есть запись с этим в описании просто не удалось, мы бы
  • 0
    Самое безопасное, что нужно сделать, это предположить, что все входящие переменные не экранированы и работают с ними непосредственно перед выполнением запроса.
Показать ещё 2 комментария

Ещё вопросы

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