Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO准备的声明_Php_Mysql_Pdo_Prepared Statement - Fatal编程技术网

Php PDO准备的声明

Php PDO准备的声明,php,mysql,pdo,prepared-statement,Php,Mysql,Pdo,Prepared Statement,我目前正在尝试运行一个查询,其中mysql表列的当前值将自身增加1。。。让我用mysql查询示例来说明这一点 $sql = mysql_query("UPDATE `table` SET quantity=quantity+1 WHERE id='$id'"); 我无法在PDO准备的声明中这样做 $sql = "UPDATE `table` SET quantity=:quants+1 WHERE id=:userid"; $sql_prep = $db->prepare($sql);

我目前正在尝试运行一个查询,其中mysql表列的当前值将自身增加1。。。让我用mysql查询示例来说明这一点

$sql = mysql_query("UPDATE `table` SET quantity=quantity+1 WHERE id='$id'");
我无法在PDO准备的声明中这样做

$sql = "UPDATE `table` SET quantity=:quants+1 WHERE id=:userid";
$sql_prep = $db->prepare($sql);
$sql_prep->bindParam(":quants", what will i write here??);
$sql_prep->bindParam(":userid", $id);
$sql_prep->execute();

需要帮助。。!谢谢

您不需要将其作为参数传递,只需执行以下操作:

$sql = "UPDATE `table` SET quantity=quantity+1 WHERE id=:userid";
$sql_prep = $db->prepare($sql);
$sql_prep->bindParam(":userid", $id);
$sql_prep->execute();

您不需要保护
数量
,因为您只是在增加数据库中已有的值

 $sql = "UPDATE `table` SET quantity=quantity+1 WHERE id=:userid";
您还可以删除
:quants的绑定行

 $sql_prep = $db->prepare($sql);

 // NOT NEEEDED --> $sql_prep->bindParam(":quants", what will i write here??);

 $sql_prep->bindParam(":userid", $id);
 $sql_prep->execute();

准备好的语句用于保护通过查询从外部插入数据库的数据。

sql\U注入如何?此查询是否会阻止sql注入…?无注入,传递给查询的唯一参数是userid。数量是数据库内部的。在转换或操作数据库内部的数据时,通常不必担心SQL注入,MySQL数据库已经在处理本机数据,不需要指导如何处理。此规则的例外情况是在存储过程中编写SQL查询。确定。。那么用户ID bindparam呢?。。我是否必须像PDO::PARAM_INT这样做以提高安全性,或者这样做可以吗?这样很好,参数数据类型是可选的。如果您的id字段是整数,那么您可以添加PDO::PARAM_INT,这只是为了完整性,但不是必需的。