rowCount()作为变量或直接包含在if语句中哪个更好?

时间:2011-09-07 18:52:40

标签: php mysql performance pdo

我见过人们像这样使用rowCount ......

if ($q -> rowCount() < 1) {
   ....
}

我在大多数情况下使用它的方式我的问题是,如果你有多个elseif语句,最好将它存储在变量中,因为rowCount不会被多次调用?像这样......

if (isset($_GET['action']) && $_GET['action'] === 'addhotlink') {
    $q = $dbc -> prepare("SELECT * FROM hotlinks WHERE id = ?");
    $q -> execute(array($details['id']));
    $result = $q -> rowCount();
    if ($result < 3) {
        echo '<p>Choose a name for your hotlink (max 15 characters):</p><p><form action="/success?action=hotlink" method="post"><input type="text" name="link_name" maxlength="15" /></p><input type="hidden" name="addhotlink" value="' . $_SERVER['HTTP_REFERER'] . '" /><p><input id="submit" type="submit" value="Add Hotlink" /></p></form>';
    }
    elseif ($result < 10 && $details['subscriber'] > 0) {
        echo '<p>Choose a name for your hotlink (max 15 characters):</p><p><form action="/success?action=hotlink" method="post"><input type="text" name="link_name" maxlength="15" /></p><input type="hidden" name="addhotlink" value="' . $_SERVER['HTTP_REFERER'] . '" /><p><input id="submit" type="submit" value="Add Hotlink" /></p></form>';
    }
    elseif ($result > 9 && $details['subscriber'] > 0) {
        echo '<p>You have already used your maximum number of 10 hotlinks.</p>';
    }
    else {
        echo '<p>You have already used your maximum amount of hotlinks allowed for non subscribed members.</p><p>To get more please <a href"#">subscribe</a>.</p>';
    }

哪个更好,为什么?

3 个答案:

答案 0 :(得分:1)

如果您只需要行数而不是实际数据,则应该更喜欢简单的“SELECT COUNT(*)”。 无论如何都会缓存AFAIK rowCount(),因此无需将其存储在局部变量中。

答案 1 :(得分:0)

我认为将rowCount()存储在局部变量中总是会更快,因为你没有函数调用的开销

答案 2 :(得分:0)

逻辑上按照你在这个例子中的方式进行操作应该更快,因为$result只是内存中需要读取的位置,即超快速,而rowCount()如果是需要的函数处理和返回数据。