SQL SELECT语句在php中不起作用

时间:2017-10-31 15:24:10

标签: php telegram-bot php-telegram-bot

我正在写一个电报php机器人,而且我的sql select语句出现了问题,这个问题无效。
这是脚本:

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

chat id是一个整数var,我从用户个人资料中获取并检查它是否存在于数据库中;但无论如何,它总是将user_status设置为“new'即使该聊天ID已存在于数据库中。

我们也在数据库中存储了用户名(这是字符串)所以我用用户名启动了这个SQL SELECT,它起作用了!
问题是什么?
更新:我刚刚尝试过“mysqli'不幸的是,我得到了相同的结果。

3 个答案:

答案 0 :(得分:1)

  

对于大多数数据库,PDOStatement :: rowCount()不返回   受SELECT语句影响的行数。相反,使用   PDO :: query()发出带有相同的SELECT COUNT(*)语句   将谓词作为预期的SELECT语句,然后使用   PDOStatement :: fetchColumn()来检索将要的行数   被退回然后,您的应用程序可以执行正确的操作。

如果您想了解更多

,请查看此link

*如果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 :(得分:1)

rowCount()返回受相应PDOStatement对象执行的最后一个DELETE,INSERT或UPDATE语句影响的行数。

所以rowCount()用select语句真的不可靠,我建议你做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';
}

答案 2 :(得分:0)

删除你身份的引号和点

 $check_user = $con->query("SELECT * FROM Users WHERE chat_id='$chat_id'");