我一直在梳理先前的问题并尝试许多解决方案,但无法弄清楚。我正在尝试将此查询转换为预准备语句:
$query = mysqli_query($this->con, "SELECT * FROM notifications WHERE user_to='$userLoggedIn' ORDER BY id DESC");
这里是我所拥有的:
$query = $this->con->stmt_init();
$query->prepare('SELECT * FROM notifications WHERE user_to=? ORDER BY id DESC');
$query->bind_param('s', $userLoggedIn);
$query->execute();
$query->store_result();
$qty = $query->num_rows;
$query_result = $query->get_result();
在下面的代码中,我有这样使用的变量:
if($qty == 0) {
echo "<li class='no-more-posts' style='height: 0px; text-transform: uppercase;'>- You have no notifications! -</li>";
return;
}
$num_iterations = 0; //Number of messages checked
$count = 1; //Number of messages posted
while($row = $query_result->fetch_assoc()) {
if($num_iterations++ < $start)
continue;
if($count > $limit)
break;
else
$count++;
$user_from = $row['user_from'];
etc.etc.
我得到的是空白的下拉列表。如果我将while
语句改回原来的while($row = mysqli_fetch_array($query)) {
(我知道这是错误的,并且是旧语句),我的结果将始终返回li
没有更多帖子可显示。这告诉我$qty = $query->num_rows;
返回0。根据文档,我的理解是,一旦我用store_result()
缓冲了结果集,就可以立即调用$qty = $query->num_rows;
。我在这里想念什么?
答案 0 :(得分:0)
我敢肯定这不是做事的最有效方法,但这就是我的全部。决定分手。
首先,我对计数进行了说明:
$query_count = $this->con->stmt_init();
$query_count->prepare('SELECT COUNT(*) FROM notifications WHERE user_to=?');
$query_count->bind_param('s', $userLoggedIn);
$query_count->execute();
$query_count_result = $query_count->get_result();
$rows_count = $query_count_result->fetch_array();
$qty = array_shift($rows_count);
然后我对数据进行了声明:
$query = $this->con->stmt_init();
$query->prepare('SELECT * FROM notifications WHERE user_to=? ORDER BY id DESC');
$query->bind_param('s', $userLoggedIn);
$query->execute();
$query_result = $query->get_result();
它解决了我的问题,一切正常。我知道有更好的方法可以做到这一点,因此,如果有人对此建议很好。同时,这将是必须要做的。