pdo为多个when和then语句绑定参数



我需要一次更新单个表中的多行。所以我使用了以下查询:

UPDATE color
SET color_id= CASE color_id
WHEN 45 THEN 56
WHEN 64 THEN 78
END
WHERE color_id IN (45,64)

我必须在pdo结构中使用prepared语句,所以将其更改为:

$query = "UPDATE color SET color_id= CASE color_id WHEN :old THEN :new END WHERE color_id = :old";
$stmt = $conn->prepare($query);
$params[0] = array(array("var"=>":old","val"=>"45"),array("var"=>":new","val"=>"56"));
$params[1] = array(array("var"=>":old","val"=>"64"),array("var"=>":new","val"=>"78"));
foreach ($params as $value) {
foreach ($value as $row) {
$stmt->bindParam($value['var'], $value['val'], PDO::PARAM_STR);
}
$stmt->execute();
}

$result = $stmt->fetchAll();

我知道这个方法会比以前的方法慢一点。我的主要目标是防止sql注入。有没有其他方法可以用prepared语句实现1st查询,使其与1st查询一样快?

如果数据只是数字,那么用is_numeric()测试每个数字就足以防止SQL注入。

如果你使用字符串,那么最好模拟PDO将要执行的转义。我认为addslashes()就足够了。

(不幸的是,有些查询的API不够灵活。(

最新更新