【发布时间】:2014-05-11 16:37:42
【问题描述】:
我能够从标准 SQL 查询中获取结果,但是对于准备好的语句,我很好,直到从查询中获取结果。
作为后台,查询将产生多于一行。
$sql = "SELECT * FROM blog WHERE ID=?";
if (!$stmt = $con -> prepare($sql)) {
echo "Prepare failed: (" . $con->errno . ") " . $con->error;
}
if (!$stmt->bind_param("i", $_GET["ID"])) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
while($row = $stmt->fetch_assoc()){
$blog_title = $row['title'];
$blog_body = $row['body'];
$blog_blurb = $row['blurb'];
$blog_date = $row['posted'];
$blog_tags = $row['tags'];
}
这会导致
致命错误:调用未定义的方法 mysqli_stmt::fetch_assoc()
但是,我尝试了 PHP 手册中概述的内容,但没有成功。
【问题讨论】:
-
尝试
var_dump(get_class_methods($stmt))查看可用的方法。 -
使用
while ($row = $stmt->fetch()) { -
好笑,但函数调用完全一样——get_result()
-
@Loïc 当我尝试得到
"array(17) { [0]=> string(11) "__construct" [1]=> string(8) "attr_get" [2]=> string(8) "attr_set" [3]=> string(10) "bind_param" [4]=> string(11) "bind_result" [5]=> string(5) "close" [6]=> string(9) "data_seek" [7]=> string(7) "execute" [8]=> string(5) "fetch" [9]=> string(12) "get_warnings" [10]=> string(15) "result_metadata" [11]=> string(8) "num_rows" [12]=> string(14) "send_long_data" [13]=> string(11) "free_result" [14]=> string(5) "reset" [15]=> string(7) "prepare" [16]=> string(12) "store_result" } " -
正如@AbhikChakraborty 提到的,你应该使用
fetch()
标签: php arrays mysqli prepared-statement