Используя SQlite3 в PHP, как подсчитать количество строк в наборе результатов?

в настоящее время я использую:

$result = new SQLite3(sprintf("users/USERIDS_DB.sqlite"));

$numRows = $result->exec ("SELECT count(*) FROM USERIDS");

echo sprintf("the number of rows are: %d", $numRows);

но результат равен 1, хотя должно быть 6 (количество строк, которые я создал с помощью надстройки Firefox sqlite3)

Кто-нибудь может помочь, пожалуйста?


person Remover    schedule 06.04.2010    source источник


Ответы (4)


Из документации:

public bool SQLite3::exec (строка $query)

Выполняет безрезультатный запрос к заданной базе данных.

Эти методы возвращают логическое значение, а не набор результатов. Когда вы преобразуете true в целое число, оно станет 1.

Вы должны использовать SQLite3::query(). Пример (непроверенный):

$rows = $result->query("SELECT COUNT(*) as count FROM USERIDS");
$row = $rows->fetchArray();
$numRows = $row['count'];

Кстати, наименование экземпляра класса SQLite3 $result может ввести в заблуждение (особенно в среде БД). Я бы назвал это $db или $connection.

person Felix Kling    schedule 06.04.2010
comment
должно быть $numRows = $row['COUNT(*)']; - person Unplug; 31.03.2016
comment
@Unplug: нет, так как результат COUNT(*) сохраняется в count: COUNT(*) as count. - person Felix Kling; 31.03.2016
comment
querySingle() тоже хорошая альтернатива: $numRows = $db->querySingle("SELECT COUNT(*) as count FROM USERIDS"); - person Sergio Rodrigues; 05.08.2016

<?php
    function SqliteNumRows($query){
        $numRows = 0;
        while($rows = $query->fetchArray()){
            ++$numRows;
        }
        return $numRows;
    }
?>

Это действительно помогло мне, это работает, на самом деле вы можете попробовать

person Simbarashe D Andrea    schedule 28.01.2017

Вот рабочий способ получить количество строк, поскольку ни sqlite_num_rows($result), ни $result->numRows() не работают на SQLite3:

<?php
     $db = new SQLite3('database.db');

    $results = $db->query('SELECT COUNT(*) FROM (SELECT `id`,* FROM `table` ORDER BY `id` ASC);');
        while ($row = $results->fetchArray()) {
           echo $row["COUNT(*)"];
        }
?>
person russell    schedule 20.04.2017

Это полезно, когда у вас есть условия в запросе count select:

$stmt = $db->prepare('SELECT COUNT(*) AS `count` FROM `tablename` WHERE `foo`=:foo');
$stmt->bindValue(':foo', $foo);
$stmt->execute();
$count = $stmt->fetchColumn();
echo $count;
person Nabi K.A.Z.    schedule 03.11.2018