Получение 1064 Ошибка в MySQL, но запрос все еще завершается? Не уверен почему! - PullRequest
0 голосов
/ 02 июня 2010

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

Замена кажетсяработать, как я вижу, поля, заполняемые в 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";
   }

1 Ответ

1 голос
/ 02 июня 2010

В вашем 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 интерпретирует логическое значение 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, вот так.

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