【发布时间】:2014-02-21 20:35:43
【问题描述】:
我正在将此查询转换为准备好的语句:
$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,就像在第一个语句中一样。 -
我更改了名称以使其更易于阅读。他们确实匹配。如果是这样的话,我想我不会得到
bool(true)