php-mysql count() повторяющиеся результаты запроса

#php #mysql

#php #mysql

Вопрос:

Использование count() запроса с php приведет к отображению результата в цикле. Как исправить эту проблему?

у phpmyadmin нет проблем с отображением суммы, но он не может применить ее к php-коду.

 $conn = mysqli_connect('localhost','root','','db'); 
if (!$conn) { die('db error'); };
$result = mysqli_query($conn, '
select count(*) as x from users
');

$row = mysqli_fetch_assoc($result);
echo $row['x'];
  

Ожидаемый результат :

 2 
  

Фактический результат :

 2222222222222222222222222222222222222222222222222222222222222222222...
  

Комментарии:

1. почему count(*) ? попробуйте count( distinct YOUR_PK)

2. вы абсолютно уверены, что это полный код? (… и нет времени вокруг $ row = mysqli_fetch …?)

3. Это весь ваш скрипт? Это встроено в цикл? Можете ли вы попробовать изменить свое echo на echo $row['x'] . ' - '; , чтобы посмотреть, выводит ли оно это тире в качестве разделителя. Это укажет, выполняется ли этот блок кода в цикле (многократный запрос и повторное отображение), или это $row[‘x’], который содержит все эти 2 (маловероятно).

4. @Mohammad Будь осторожен с этим запросом. Если СУБД не достаточно умна, чтобы понять, что distinct значение PK бессмысленно и игнорирует distinct требование, добавление «distinct» к значению PK просто увеличит накладные расходы на запрос. Зачем поручать СУБД выполнять дополнительную работу по проверке различных значений в столбце, который может содержать только различные значения? Кроме того, count(distinct ...) имеет конкретный вариант использования и не является синонимом count(*) . OP может захотеть узнать, сколько отдельных строк в таблице, а не сколько экземпляров конкретной группы в таблице.

5. Редактировать : Внезапно мои коды возвращаются, теперь он отображает ‘2’ вместо ‘2222222222222222222222 …’. Так странно с моим php-скриптом.

Ответ №1:

Я рекомендую вам использовать подготовленные инструкции.

 $conn = new mysqli("localhost", "root", "", "db");
if($stmt = $conn->prepare("SELECT count(*) as x FROM users")) {
    $stmt->execute(); 
    $result = $stmt->get_result();
    while($row = $result->fetch_assoc()) {
        $number = $row['x'];
    }
    $stmt->close();
}else{
    echo "Error";
}
$conn->close();
if(isset($number)){
    echo $number;
}
  

Комментарии:

1. как это решает проблему операционной системы?

2. Извините, это очень приятно, но на самом деле это не содержит разрешения.

3. Это работает! Спасибо, теперь отображается ‘2’. Почему мой исходный код не работает?