2015-07-14 6 views
0

Этот код работает, таблица обновляется, но сервер отвечает: «У вас есть ошибка в синтаксисе SQL».(UPDATE SET) У вас возникла ошибка в синтаксисе SQL

Спрашивается ради интереса. Скажите, пожалуйста, где ошибка

$id = $_POST['id']; 
$name = $_POST['name']; 
$image = $_POST['image']; 
$price = $_POST['price']; 

mysql_connect("localhost","main","password"); 
mysql_select_db("main"); 

$result = mysql_query("SELECT * FROM goods WHERE id='".$id."'"); 
if(mysql_num_rows($result) > 0) { 
    $newquery = mysql_query("UPDATE goods SET name='".$name."', image='".$image."', price='".$price."' WHERE id='".$id."'"); 
    if(!mysql_query($newquery)) { 
     die('Invalid query: ' . mysql_error()); 
    } else { 
     echo "Updated successfully"; 
     } 
    } else { 
     echo "Error: there is no such product in DB"; 
    } 

Ошибка:

Invalid query: 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

+0

* YOU * tell * US * какая ошибка. Отправьте сообщение об ошибке * WHOLE *. –

+4

[Ваш скрипт находится под угрозой для SQL-инъекций.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+2

Если вы можете, вы должны [ прекратите использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). Они больше не поддерживаются и [официально устарели] (https://wiki.php.net/rfc/mysql_deprecation). Узнайте о [подготовленном] (http://en.wikipedia.org/wiki/Prepared_statement) [заявлениях] (http://php.net/manual/en/pdo.prepared-statements.php) и рассмотрите возможность использования PDO , [это действительно не сложно] (http://jayblanchard.net/demystifying_php_pdo.html). –

ответ

-2

Ваше состояние, где это неправильно. Он ожидает, что целое число не является строкой для ID.

Должно быть:

$newquery = mysql_query("UPDATE goods SET name='".$name."', image='".$image."', price='".$price."' WHERE id=".$id); 

Но следует иметь в виду 2 вещи.

  1. mysql_query и все функции mysql_ были заменены mysqli_

  2. вы уязвимы для инъекции SQL. Вы должны использовать PDO или любую абстракцию ORM/Database для обработки запросов, чтобы предотвратить это.

+0

Несколько вещей: 1.) Попробуйте как строку, так и число для выбора из целочисленного столбца в MySQL и посмотреть, что произойдет. B.) 'mysqli_ *' не заменил mysql_ *, это улучшенный API и в некоторых случаях имеет совершенно другой синтаксис. И 3.) Если вы используете PDO, использовать 'mysqli_ *' ¯ \\ _ (ツ) _/¯ –

+0

1. Скорее всего, либо его параметр ошибается, когда он может даже иметь цитату вокруг значения, либо что-то еще выдает его утверждение. B) mysqli имеет общий интерфейс, поэтому в большинстве случаев вы можете использовать функции mysqli_ как но замена OO предпочтительна. и 3) Я просто упоминаю, что он должен использовать PDO главным образом, чтобы избежать необходимости выполнять всю сложную работу по фильтрации входных данных, чтобы предотвратить внедрение sql – MiltoxBeyond

+0

Вы можете фильтровать входные данные при использовании MySQLi. –

0

'name' - это MySQL keyword. Если вы планируете использовать его в качестве имени столбца, вы должны использовать обратные тики при выполнении запросов в столбце:

"UPDATE `goods` SET `name`='".$name."', `image`='".$image."', `price`='".$price."' WHERE `id`='".$id."'" 
+0

Нет, это не имело смысла. Все еще синтаксическая ошибка. Я проверю ваши ссылки позже, спасибо за ваше время – Danny

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