MySQL PDO安全删除表中的行?

时间:2014-06-13 00:09:58

标签: php mysql sql pdo

如果我理解正确,那么这将是安全替换表中行的方法:

$stmt = $db->prepare("REPLACE INTO MyTable(ColA,ColB) VALUES(:ColA,:ColB)");
$stmt->execute(array(':ColA' => $colA, ':ColB' => $colB));
$affected_rows = $stmt->rowCount(); 

但我怎样才能安全删除一行? (只有了解ColA值)

2 个答案:

答案 0 :(得分:3)

您通过使用PDO和预处理语句正确地执行此操作 - 这是执行查询的安全途径。删除时可以使用相同的逻辑:

$stmt = $db->prepare("DELETE FROM MyTable WHERE ColA = :ColA");
$stmt->execute(array(':ColA' => $colA));

准备好的语句可以(并且应该)用于任何类型的查询,无论是SELECTINSERTREPLACEDELETEUPDATE等......准备好了#39;它的神奇之处在于查询本身与您正在使用的参数值之间的分离。 :ColA是一个占位符,您将在执行查询时替换它 - 在这种情况下,使用带有占位符名称的数组和要在其中使用的值 - array(':ColA'=>$colA)。这是执行查询的安全方法,因为它可以防止参数(用户输入)被误解为SQL命令,从而最大限度地降低在服务器上执行恶意查询的风险。

简而言之,你做得对。

答案 1 :(得分:1)

以与REPLACE查询

完全相同的方式使用预准备语句
$stmt = $db->prepare('DELETE FROM MyTable WHERE ColA = ?');
$stmt->execute([$colA]);

或者,如果你真的在命名参数上出售......

$stmt = $db->prepare('DELETE FROM MyTable WHERE ColA = :ColA');
$stmt->execute([':ColA' => $colA]);