MySQL无法正确更新

时间:2015-01-16 04:58:38

标签: php mysql

我似乎对一些基本的mysql命令有点麻烦。这是我创建的名为item的表:

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

有谁可以告诉我这件事有什么问题?提前谢谢!

3 个答案:

答案 0 :(得分:0)

问题在于你没有parameterized your query to prevent MySQL injection。因此,$ _POST和$ _GET变量可以包含任何内容,包括恶意代码。

在这种情况下,你很幸运。其中一个变量可能导致语法错误。黑客可以轻松地将您的任何变量操作到整个表的DROP,或者从其他表中读取敏感数据。

此外,php的原始MySQL扩展现已弃用。确保使用MySQLi或PDO_MySQL而不是php的MySQL扩展。

答案 1 :(得分: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

答案 2 :(得分:-1)

使用此

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