it-roy-ru.com

MySQLi count (*) всегда возвращает 1

Я пытаюсь посчитать количество строк в таблице и подумал, что это был правильный способ сделать это:

$result = $db->query("SELECT COUNT(*) FROM `table`;");
$count = $result->num_rows;

Но count всегда возвращает (int)1. Если я использую тот же запрос в phpMyAdmin, я получаю правильный результат. Он находится в таблице, поэтому я также попытался протестировать $count[0], но это возвращает NULL.

Как правильно это сделать?

32
Lode

Вы должны получить эту одну запись, она будет содержать результат Count ()

$result = $db->query("SELECT COUNT(*) FROM `table`");
$row = $result->fetch_row();
echo '#: ', $row[0];
85
VolkerK

Всегда старайтесь делать ассоциативную выборку, чтобы вы могли легко получить желаемое в нескольких случаях.

Вот пример

$result = $mysqli->query("SELECT COUNT(*) AS cityCount FROM myCity")
$row = $result->fetch_assoc();
echo $row['cityCount']." rows in table myCity.";

$result->close();
6
ErVeY

$ Result-> num_rows; возвращает только количество строк, на которые влияет запрос. Когда вы выполняете подсчет (*) для таблицы, она возвращает только одну строку, поэтому у вас не может быть результата, отличного от 1.

1
Stephane Paquet

Это хорошо сработало для меня.

        // Veh Pro Count
    $query_tvp = "SELECT count(*) as total from submit";
    if ($result_tvp = $mysqli->query("$query_tvp")) {
        /* determine number of rows result set */
        $total_tvp = $result_tvp->fetch_row();
        $total_tvp = $total_tvp['0'];
        /* close result set */
        $result_tvp->close();
    }

            echo "Total: $total_tvp";
0
David Sargent

Я считаю этот способ более читабельным:

$result = $mysqli->query('select count(*) as `c` from `table`');
$count = $result->fetch_object()->c;
$result->free();
$mysqli->close();
echo "there are {$count} rows in the table";

Не то чтобы я имел что-то против массивов ...

0
Mike Causer