如果我理解正确,那么这将是安全替换表中行的方法:
$stmt = $db->prepare("REPLACE INTO MyTable(ColA,ColB) VALUES(:ColA,:ColB)");
$stmt->execute(array(':ColA' => $colA, ':ColB' => $colB));
$affected_rows = $stmt->rowCount();
但我怎样才能安全删除一行? (只有了解ColA值)
答案 0 :(得分:3)
您通过使用PDO和预处理语句正确地执行此操作 - 这是执行查询的安全途径。删除时可以使用相同的逻辑:
$stmt = $db->prepare("DELETE FROM MyTable WHERE ColA = :ColA");
$stmt->execute(array(':ColA' => $colA));
准备好的语句可以(并且应该)用于任何类型的查询,无论是SELECT
,INSERT
,REPLACE
,DELETE
,UPDATE
等......准备好了#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]);