2

所以,我一直在学习 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!
}

这写得好吗?

4

3 回答 3

2

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

于 2012-07-10T16:41:33.880 回答
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//
    }
}
于 2012-06-15T17:23:03.690 回答
-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!
}
于 2012-06-15T17:21:48.990 回答