【发布时间】:2014-05-18 21:41:17
【问题描述】:
下面是一些写得不好且被严重误解的 PHP 代码,没有错误检查。老实说,我在 PHP-> MySQLi 函数的迷宫中有点挣扎!有人可以提供一个示例,说明如何使用准备好的语句在关联数组中收集结果,同时还从 $stmt 获取行数?下面的代码是我正在玩的。我认为让我失望的一点是在store_result 之后使用$stmt 值,然后尝试收集一个 assoc 数组,我不太清楚为什么......
$mysqli = mysqli_connect($config['host'], $config['user'], $config['pass'], $config['db']);
$stmt = $mysqli->prepare("SELECT * FROM licences WHERE generated = ?");
$stmt->bind_param('i', $core['id']);
$result = $stmt->execute();
$stmt->store_result();
if ($stmt->num_rows >= "1") {
while($data = $result->fetch_assoc()){
//Loop through results here $data[]
}
}else{
echo "0 records found";
}
我觉得只是要求代码有点厚颜无耻,但它是我的情况的一个工作演示,我觉得我需要最终了解实际发生的情况。谢谢一百万!
【问题讨论】:
-
对于初学者,您始终可以使用 FETCH_ALL 而不是 FETCH_ASSOC 或 FETCH_NUM,从而生成一个包含关联值和编号值的数组。其他选项:当您循环遍历结果时,只需有一个索引,在循环之前将其设置为 $i=0 ,然后执行 $i++;循环内。除此之外,我认为我并没有真正理解你的问题。我正在考虑更多,但我们将不胜感激。
-
我目前收到错误
Fatal error: Call to a member function fetch_assoc() on a non-object,我认为这是因为我的编码不正确,而不是它实际上是一个非对象,因为num_rows实际上并没有返回 0。所以 UI 认为这部分错了$logData = $result->fetch_assoc() -
不,那么问题就从
$result = $stmt->execute();部分开始。这很可能意味着 $results 实际上是一个错误,因为执行不成功。当我使用它时,这通常是因为查询错误。所有表名和列名是否正确且大小写正确? -
在准备和/或执行之后可能要尝试的一件事是
echo $mysqli->error;。 -
嗯,我明白你的意思了。不,查询看起来很好,没有输出错误:/
标签: php mysqli prepared-statement fetch associative-array