【问题标题】:why does my SQL execute(select exists) function always returns 1?为什么我的 SQL 执行(选择存在)函数总是返回 1?
【发布时间】:2020-10-13 07:51:11
【问题描述】:

我似乎无法弄清楚这段 PHP 代码有什么问题:

$sql = $db->prepare("SELECT EXISTS(SELECT 1 FROM profile WHERE uid = ?)");  
          $p_already_exists = $sql->execute([$_SESSION['uid']]);

我正在运行 sqlite3 PDO 模块,不管 'uid' 是否在数据库中,$p_already_exists 总是分配为 1。如果它不在,我希望它为 0数据库,如果数据库中至少有一条记录,则为 1。

我已经仔细检查过,回显 $_SESSION['uid'] 给我的值与数据库中的 uid (TEXT) 相同。

有人知道为什么这对我不起作用吗?归根结底,我只是在寻找一种返回布尔值的有效方法(因此我不使用 COUNT)。感谢您的帮助。

参考How to check whether SELECT EXISTS returns a value or not?

【问题讨论】:

  • 您正在查看 execute 方法的返回值 - 这与语句是否找到任何内容无关,反映是否该语句可以成功执行且没有错误。

标签: php sqlite pdo


【解决方案1】:

PDOStatement::execute() 返回一个布尔值,成功时为 TRUE,失败时为 FALSE:

https://www.php.net/manual/en/pdostatement.execute.php

如果你想得到SQL语句执行返回的实际结果,而不是执行本身的状态,你应该在调用execute()之后使用fetch*函数之一,例如fetchColumn()

【讨论】:

    猜你喜欢
    • 2017-09-24
    • 2020-02-22
    • 1970-01-01
    • 2019-06-26
    • 2013-01-09
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多