我这个查询转换成一份准备好的声明:msyqli预处理语句不工作的权利
$stmt = "SELECT * FROM `table` WHERE col1 ='". $var1. "' and col2 = '".$var2."' and col3 ='".$var3."'";
$result = mysqli_query($db, $stmt);
$item_row=mysqli_fetch_row($result);
与它的结果是我回应了item_row[1]
,item_row[2]
,等这工作得很好。
这是事先准备好的声明,我放在一起,但它不工作:
$stmt = $db->prepare("SELECT * FROM `table` WHERE col1 = ? and col2 = ? and col3 =?");
$stmt->bind_param("sss", $var1,$var2,$var3);
$stmt->execute();
while ($item_row = $stmt->fetch()) {
print_r($item_row); // prints: 1
var_dump($item_row); // prints: bool(true)
}
我利用How can I prevent SQL injection in PHP?代码尝试,但它打破了整个页面。
我也读过并尝试过How can I prevent SQL injection in PHP?的例子,但都没有工作。上面的例子是我得到的最远的例子。
任何想法我需要做什么?
列名是错在你的PDO声明你需要使用'col1','col2','col3'就像你在你的第一个陈述中所做的一样。 – cmorrissey
我更改了名称以便于阅读。他们确实匹配。如果是这种情况,我不认为我得到'bool(true)' –