КОЛИЧЕСТВО MySQL, дающее разные результаты

#php #mysql #sql #mysqli

#php #mysql #sql #mysqli

Вопрос:

Если я использую это в PHP для подсчета записей, это дает количество 1, когда на самом деле записей нет. Однако, когда я запускаю один и тот же запрос в HeidiSQL, phpmyadmin или любом другом, он выдает правильный 0. Почему расхождение?

 if ($result = $mysqli->query($Query)) :
    return $result->num_rows;
    $MySQLError = ($mysqli->connect_errno) ? mysqli_error($mysqli) : "";
    $result->close();
    $mysqli->close();
    if ($MySQLError) return $MySQLError;
endif;
  

В этом случае $Query содержит:

 SELECT COUNT(ID) AS UpdateCount 
FROM tablename 
WHERE ShowPage = 1 AND 
DateUpdated BETWEEN 1554345942 AND 1554950742
  

Ответ №1:

Работая над чем-то другим, ответ на эту проблему внезапно поразил меня, и теперь это очевидно, когда я это вижу. Я использовал COUNT(ID) в запросе, но также использовал $result->num_rows в программировании. Простое удаление COUNT(ID) сделало свое дело.

 SELECT ID 
FROM tablename 
WHERE ShowPage = 1 AND 
DateUpdated BETWEEN 1554345942 AND 1554950742
  

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

1. Молодец, что нашел его. Примите и поддержите свой ответ, чтобы будущие посетители с такими же или похожими проблемами могли извлечь выгоду!

2. @Не паникуйте, спасибо, и я чувствую себя немного глупо из-за этого, но я был уверен, что это было что-то очевидное, что я пропустил. Я удивлен, что острые глаза здесь не заметили это мгновенно! В любом случае, я не могу проголосовать за свой собственный ответ, и я вижу, что кто-то проголосовал против него по какой-то неизвестной причине, но я могу пометить его как принятый, если подожду еще девять часов.

Ответ №2:

Эта проблема может возникнуть, если еще не был зафиксирован другой сеанс базы данных. Проверка того, что нет других сеансов базы данных, которые не были зафиксированы, решает эту проблему.

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

1. Возможно, но это кажется неизменно неправильным, даже если другие запросы не были запущены. Всегда корректно в HeidiSQL и phpmyadmin, но никогда в PHP, поэтому я подозреваю, что это что-то более базовое, чем то, что я пропустил. Странно, я использую этот же код в течение длительного времени и только сейчас заметил проблему.