2010-06-02 1 views
0

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

ЗАМЕНИТЬ, кажется, работает, как я могу видеть поле заселяется в MySQL, но я получаю эту ошибку:

1064: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 '1' at line 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 и т. Д.) Правильно экранированы? –

ответ

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 как это вместо того, чтобы таким образом ваше состояние, если работает правильно:

$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 в заявлении, если тоже.

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

+0

Спасибо, это имеет смысл. Не могли бы вы уточнить, как я проверяю, использую mysql_real_escape_string()? Из проверки появляется, что записи, которые не имеют апострофа в описании. т.е. запись с этим в описании просто не удалась было бы – kitenski

+0

. Самое безопасное, что нужно сделать, - это принять, что переменные, входящие в систему, не отображаются и запускают эту функцию непосредственно перед запуском запроса. – BoltClock

+0

Я сделал несколько поисков и все примеры, т. Е. Здесь http://php.net/manual/en/function.mysql-real-escape-string.php говорят о необходимости его для POST и GET, ни один из которых я делаю, так это все еще необходимо? – kitenski