SQL SELECT 语句在 php 中不起作用



我正在写一个电报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';
}

聊天ID是一个整数var,我从用户配置文件中获取并检查它是否存在于数据库中;但无论如何,它总是将user_status设置为"new",即使该聊天ID已经存在于数据库中。

我们也将用户名存储在数据库中(这是字符串),所以我用用户名启动了这个非常 SQL SELECT,它起作用了!

怎么了?
更新:我刚刚尝试了"mysqli",不幸的是我得到了相同的结果。

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

所以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 语句,然后使用 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';
}

删除 id 上的引号和点

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

相关内容

  • 没有找到相关文章

最新更新