使用MySQLi返回行数

时间:2014-12-18 16:51:27

标签: php pdo mysqli

我正在尝试返回在我的数据库中找到的行数。第一次使用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>";
}

2 个答案:

答案 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);

虽然您接受的答案确实有效,但出于安全性和最佳做法的原因,我建议您进行上述更改(至少是查询)。