我正在将此查询转换为准备好的语句:
$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?的例子,但都没有用。上面的例子是我得到的最远的。
任何想法我需要做什么?
答案 0 :(得分:1)
试试这个:在一个数组中整齐地返回所有数据的方法: 还要确保要获取的列的名称是正确的。
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
$parameters[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $parameters);
while ($stmt->fetch()) {
foreach($row as $key => $val) {
$x[$key] = $val;
}
$results[] = $x;
}
答案 1 :(得分:1)
您是否尝试将结果绑定到变量?
$stmt = $db->prepare("SELECT col1, col2, col3 FROM `table` WHERE col1 = ? and col2 = ? and col3 =?");
$stmt->bind_param("sss", $var1, $var2, $var3);
$stmt->execute();
$stmt->bind_result($col1, $col2, $col3);
while ($stmt->fetch()) {
echo "$col1 $col2 $col3<br/>";
}
PDO更直观,看起来像这样:
//assuming $db is a PDO object
$stmt = $db->prepare("SELECT col1, col2, col3 FROM `table` WHERE col1 = ? and col2 = ? and col3 =?");
$params = array($var1, $var2, $var3);
$stmt->execute($params);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($rows);