MySQLi count (*) всегда возвращает 1 - PullRequest
34 голосов
/ 01 сентября 2010

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

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

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

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

Ответы [ 7 ]

87 голосов
/ 01 сентября 2010

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

$result = $db->query("SELECT COUNT(*) FROM `table`");
$row = $result->fetch_row();
echo '#: ', $row[0];
6 голосов
/ 01 сентября 2010

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

Вот пример

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

$result->close();
1 голос
/ 08 ноября 2011

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

0 голосов
/ 28 марта 2019

Сам образец.

$query="select count(*)as count from users";
$result=$connection->query($query);
$count=mysqli_fetch_assoc($result)["count"];
echo $count;
0 голосов
/ 26 марта 2018

Для меня это работает, это когда вы хотите посчитать повторяющиеся элементы в регистре.

Например: количество людей, которые отмечают «да» в форме.

таблица: пользователи

регистрация: голосование

элемент регистрации: да / нет

$sql_user = "SELECT COUNT(*) FROM users WHERE vote = 'yes'";    
$result1 = $mysqli->query($sql_user);    
$row1 = $result1->fetch_row();    
$n_yes = $row1['0'];
0 голосов
/ 22 июня 2014

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

        // 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 голосов
/ 02 августа 2012

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

$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";

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...