我对mysqli预处理语句有点新意,我想使用fetch_array返回结果并将num_rows作为数组值返回。
我有类似的东西
function getCategories($dbh, $catId)
{
$data = array();
$s = "SELECT id, title FROM categories WHERE parent_id = ?";
if ($stmt = mysqli_prepare($dbh, $s)) {
mysqli_stmt_bind_param($stmt, "i", $catId);
mysqli_stmt_execute($stmt);
if (mysqli_stmt_errno($stmt)) {
exit(mysqli_stmt_error($stmt));
}
mysqli_stmt_store_result($stmt);
$count = mysqli_stmt_num_rows($stmt)) {
if ($count) {
$data['count'] = $count;
$result = mysqli_stmt_get_result($stmt);
while ($r = mysqli_fetch_assoc($result)) {
$data[] = $r;
}
}
return $data;
} else {
exit(mysqli_error($dbh));
}
}
似乎我不能使用mysqli_stmt_store_result和mysqli_stmt_get_result()。
store_result函数似乎给出了一个布尔值然后我得到了这个错误:" mysqli_fetch_assoc()期望参数1是mysqli_result,布尔给定"
希望这是有道理的。任何帮助都会非常感激。
更新:
function getCategories($dbh, $catId)
{
$data = array();
$s = "SELECT id, title FROM categories WHERE parent_id = ?";
if ($stmt = mysqli_prepare($dbh, $s)) {
mysqli_stmt_bind_param($stmt, "i", $catId);
mysqli_stmt_execute($stmt);
if (mysqli_stmt_errno($stmt)) {
exit(mysqli_stmt_error($stmt));
}
$result = mysqli_stmt_get_result($stmt);
$data['count'] = $result->num_rows;
while ($r = mysqli_fetch_assoc($result)) {
$data[] = $r;
}
return $data;
} else {
exit(mysqli_error($dbh));
}
}
答案 0 :(得分:1)
根据PHP文档,mysqli_stmt_get_result在出错时返回FALSE
:
返回成功SELECT查询的结果集,或 FALSE 表示其他DML查询或失败。 mysqli_errno()函数可用于区分两种类型的失败。
然后你将其传递给mysqli_fetch_assoc
抱怨,因为你给它一个bool而不是它期望的结果集。
在那一点上做一些错误检查,你会没事的。您的SQL查询可能有问题。请致电mysqli_errorno以确定是否存在错误,如上文所述。
修改强>
使用mysqli_error函数获取mysql错误的描述。最好在任何地方使用它来检查是否有故障,因为有一条错误消息会使调试变得比简单地无声地失败更容易。