#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, поэтому я подозреваю, что это что-то более базовое, чем то, что я пропустил. Странно, я использую этот же код в течение длительного времени и только сейчас заметил проблему.