2015-01-16 4 views
0

У меня, похоже, есть небольшая проблема с некоторыми базовыми командами mysql. Это таблица называется элемент, который я создал:MySQL не обновляется правильно

mysql> describe item; 
+------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+------------+------------------+------+-----+---------+----------------+ 
| item_id | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| item_name | varchar(255)  | NO |  | NULL |    | 
| item_price | int(10) unsigned | NO |  | NULL |    | 
+------------+------------------+------+-----+---------+----------------+ 
3 rows in set (0.00 sec) 

и это строка кода, я использую, чтобы обновить эту таблицу:

$db = mysql_connect('127.0.0.1', 'root', 'mac'); 
mysql_select_db('spending') or die(mysql_error($db)); 

$query = 'UPDATE item SET item_name = "' . $_POST['item_name'] . '", 
       item_price = ' . $_POST['item_price'] . ' 
       WHERE item_id = ' . $_GET['id'] . ''; 

$result = mysql_query($query, $db) or die(mysql_error($db)); 

, но каждый раз, когда я бегу, он всегда жалуется например:

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 'WHERE item_id = 1' at line 4 

Может ли кто-нибудь сказать мне, что не так с этой штукой? Заранее спасибо!

+0

риска SQL инъекций ... – Afsar

+0

заменить mysql на mysqli –

ответ

-1

использование этого

$query = 'UPDATE item SET `item_name` = "' . $_POST['item_name'] . '", 
        `item_price` = ' . $_POST['item_price'] . ' 
        WHERE `item_id` = '.$_GET['id']; 
0

Проблема заключается в том, что у вас есть не parameterized your query to prevent MySQL injection. Поэтому переменные $ _POST и $ _GET могут содержать все, включая вредоносный код.

В этом случае вам повезло. Одна из переменных, вероятно, вызывает синтаксическую ошибку. Хакер может легко манипулировать любой из ваших переменных до DROP всей вашей таблицы или читать конфиденциальные данные из других таблиц.

Кроме того, первоначальное расширение MySQL php теперь устарело. Убедитесь, что вы используете MySQLi или PDO_MySQL вместо расширения MySQL php.

+0

Можете ли вы написать мне код для этого случая? – Drexel

0

Прекратите использование функции MySQL, они являются устаревшими

Теперь, когда мы получили, что из пути:

//Connect to db 
$db = mysqli_connect('127.0.0.1', 'root', 'mac','spending'); 
if ($db->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error; 
} 

//Prepare our query 
$query = $db->prepare('UPDATE item SET item_name = ?, 
       item_price = ? 
       WHERE item_id = ?'); 

//Bind the parameters 
$item_name = (string)$_POST['item_name']; 
$item_price = (int)$_POST['item_price']; 
$item_id = (int)$_POST['id']; 

$query->bind_param('sii',$item_name,$item_price,$item_id); 

//Execute 
$query->execute(); 

Подробнее о MySQLi: http://codular.com/php-mysqli

+0

дает еще больше ошибок – Drexel

+0

Произошла синтаксическая ошибка, попробуйте сейчас? – Mysteryos

+0

Да, я попробовал это, вот что он говорит: Предупреждение: mysqli_stmt :: bind_param(): Число переменных не соответствует количеству параметров в подготовленном выражении в /Library/WebServer/Documents/doc/dailyexpense/edit.php on line 37 – Drexel

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