бот telegram — оператор SQL SELECT не работает в переполнении стека

Я пишу 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» и, к сожалению, я получил тот же результат.

1

Решение

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';
}
1

Другие решения

Для большинства баз данных 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';
}
1

Удалите цитаты и точки из вашего идентификатора

 $check_user = $con->query("SELECT * FROM Users WHERE chat_id='$chat_id'");
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector