Я пишу php-бот telegram, и у меня есть эта проблема с оператором выбора SQL, который не работает.
вот сценарий:
$chat_id = $update->message->chat->id;
$check_user = $con->query("SELECT * FROM Users WHERE chat_id='".$chat_id."'");
if($check_user->rowCount() > 0){
$user_data = $check_user->fetchAll();
$user_status = 'active user';
}else{
$user_status = 'new';
}
ID чата — это целочисленная переменная, которую я получаю из профиля пользователя и проверяю, существует ли она в базе данных или нет; но не смотря ни на что, он всегда устанавливает user_status в «новое», даже если этот идентификатор чата уже существует в базе данных.
мы также храним имя пользователя в базе данных (которое является строкой), поэтому я запустил этот SQL SELECT с именем пользователя, и это сработало!
в чем проблема?
обновление: я только что попробовал «mysqli» и, к сожалению, я получил тот же результат.
ROWCOUNT () возвращает количество строк, затронутых последним оператором DELETE, INSERT или UPDATE, выполненным соответствующим объектом PDOStatement.
Так что rowCount () не очень надежен с оператором select, я бы посоветовал сделать выбор, затем использовать PDOStatement :: fetchAll, который вернет массив, содержащий все строки результирующего набора, а затем посчитает массив, если его значение больше нуля. статус.
<?php
$chat_id = $update->message->chat->id;
$check_user = $con->prepare("SELECT * FROM Users WHERE chat_id = ? ");
$check_user->execute([$chat_id]);
$user_data = $check_user->fetchAll();
if (count($user_data) > 0) {
$user_status = 'active user';
}else{
$user_status = 'new';
}
Для большинства баз данных PDOStatement :: rowCount () не возвращает
количество строк, затронутых оператором SELECT. Вместо этого используйте
PDO :: query () для выдачи оператора SELECT COUNT (*) с тем же
предикаты в качестве вашего предполагаемого оператора SELECT, затем используйте
PDOStatement :: fetchColumn (), чтобы получить количество строк, которые будут
быть возвращенным. Ваше приложение может затем выполнить правильное действие.
Проверь это ссылка на сайт если вы хотите узнать больше
* Если chat_id является целым числом, вы должны удалить одинарные кавычки из вашего запроса
$chat_id = $update->message->chat->id;
$check_user = $con->query("SELECT * FROM Users WHERE chat_id = $chat_id");
if($check_user->fetchColumn() > 0){
$user_data = $check_user->fetchAll();
$user_status = 'active user';
}else{
$user_status = 'new';
}
Удалите цитаты и точки из вашего идентификатора
$check_user = $con->query("SELECT * FROM Users WHERE chat_id='$chat_id'");