我正在尝试返回在我的数据库中找到的行数。第一次使用php mvc框架对我来说很新(就像php一样)。
我的查询工作正常,数据在表格中按预期显示。
我不太确定我应该把代码放在哪里?我一直在关注mysqli_num_rows()
,mysqli_stmt_num_rows()
和PDOStatement::rowCount()
- 如果有的话我应该使用哪些?
我只想显示
我们找到了x个记录!
到目前为止我的代码;
public function categoryView()
{
$sth = $this->db->prepare("SELECT
id,
title,
FROM book
WHERE status != 'Archive' AND category='" . mysql_real_escape_string($_GET['category']) . "' ORDER BY id DESC LIMIT 15");
$sth->execute();
$all_books = array();
foreach ($sth->fetchAll() as $book) {
$all_books[$book->id] = new stdClass();
$all_books[$book->id]->id = $book->id;
$all_books[$book->id]->title = $book->title;
}
return $all_books;
}
foreach ($this->books as $book) {
echo "<tr>";
echo '<td>'.$book->id.'</td>';
echo '<td>'.$book->title.'</td>';
echo "</tr>";
}
答案 0 :(得分:0)
捷径将在你看来做这样的事情:echo count($ this-&gt; books);
另一种方法是将值推送到控制器中的数组中: return array('books'=&gt; $ all_books,'row_count'=&gt; count($ all_books));
答案 1 :(得分:0)
我们需要更正部分代码。首先,mysql()
函数需要很长时间折旧,不应该使用,尤其是mysql_real_escape_string()
。相反,您需要do a little bit of reading about PDO bound values。我猜测你在提供的代码中看到的布局和默认值,你可能已经在PHP-Mini(也就是PDO)上构建了你的系统,虽然我认为$sth->execute();
它肯定是PDO,所以你的查询应该是:
$sql = "SELECT id, title "
. "FROM book "
. "WHERE status != 'Archive' AND category = :cat "
. "ORDER BY id DESC LIMIT 15";
$sth = $this->db->prepare($sql);
$sth->bindValue(':cat', $_GET['category']);
$sth->execute();
然后,要返回计数,因为使用select语句无法预测PDO::rowCount()
行为,请使用
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
return count($result);
虽然您接受的答案确实有效,但出于安全性和最佳做法的原因,我建议您进行上述更改(至少是查询)。