MySQL PDO计数行 - 我可以提高效率吗?

时间:2012-06-15 17:18:39

标签: php mysql oop pdo

所以,我一直在学习PDO。到目前为止,老实说,由于执行小任务所需的大量代码,我并不感到印象深刻。但是,如果我能让我的代码高效且可重用,我愿意转换。

我的问题是:我可以使这段代码更有效率吗?通过有效,我的意思是A)占用较少的线,B)运行得更快。我担心我这一切都错了。但是,由于缺乏num_rows()功能,我想不出更好的方法。

try
{
    $sth = $dbh->prepare("SELECT * FROM table_name");
    $sth->execute();

    if (count($result = $sth->fetchAll()))
    {
        foreach ($result as $value)
        {
            // Rows returned! Loop through them.
        }
    }
    else
    {
        // No rows returned!
    }
}
catch (PDOException $e)
{
    // Exception!
}

这写得不错吗?

3 个答案:

答案 0 :(得分:2)

就我的研究表明,没有。没有办法更简洁或逻辑地重写这个代码 - 它的方式是完全优化的。 :)它很容易使用,所以这绝对不是一件坏事!

答案 1 :(得分:1)

使用PDO::query()发出SELECT COUNT(*)语句,其语句与预期的SELECT语句相同

然后,使用PDOStatement::fetchColumn()检索将返回的行数

$sql = "SELECT COUNT(*) FROM table_name";
if ($res = $conn->query($sql))
{
/* Check the number of rows that match the SELECT statement */
$res->fetchColumn(); //This will give you the number of rows selected//
}

制作一个通用功能,您需要做的就是根据您的需要发送select count。通过将$ select除以更多变量,您可以更通用。

function countRows($select)
{
    if ($res = $conn->query($select))
    {
    /* Check the number of rows that match the SELECT statement */
    return $res->fetchColumn(); //This will give you the number of rows selected//
    }
}

答案 2 :(得分:-1)

不,你需要使用PDO的rowCount方法。

try
{
    $sth = $dbh->prepare("SELECT * FROM table_name");
    $sth->execute();

    if ($sth->rowCount() > 0)
    {
        while ($result = $sth->fetch())
        {
            // Rows returned! Loop through them.
        }
    }
    else
    {
        // No rows returned!
    }
}
catch (PDOException $e)
{
    // Exception!
}