Php PDO execute上的变量/数组也准备好了吗?
在下面的例子中,我会说$val1。val1美元也准备好了吗Php PDO execute上的变量/数组也准备好了吗?,php,Php,在下面的例子中,我会说$val1。val1美元也准备好了吗 $sql = "SELECT * FROM table WHERE col1=:var1 LIMIT 1"; $q = $conn->prepare($sql); $q->execute(array(':var1'=>$val1)); 是的,它与任何其他基于占位符的值一样都是“准备好的”(您这样说)。 否则,这种语法就没有意义了。没有。它没有“准备好”。它只会在实际执行时,在执行时被塞进查询中。所以我需要自己检
$sql = "SELECT * FROM table WHERE col1=:var1 LIMIT 1";
$q = $conn->prepare($sql);
$q->execute(array(':var1'=>$val1));
是的,它与任何其他基于占位符的值一样都是“准备好的”(您这样说)。否则,这种语法就没有意义了。没有。它没有“准备好”。它只会在实际执行时,在执行时被塞进查询中。所以我需要自己检查$val1的安全性,以避免sql注入?不。这就是为什么要使用预处理语句。DB库将为您解决任何注入问题。如果您正在执行
$sql=“SELECT…WHERE col1=$val1”
,则是的,您必须逃离自己。@MarcB您不必这样做,但您仍然应该这样做。如果不是为了防止二阶注入,为了基本数据验证和完整性。