【问题标题】:Prepared Statement always returns 0 on if [duplicate]如果 [重复],Prepared Statement 始终返回 0
【发布时间】:2021-08-03 07:55:42
【问题描述】:

我正在尝试从 SQL 中获取计数:

function sqlCheckUserExists() 
{
    $sql = "SELECT COUNT(*) FROM users WHERE email = ? LIMIT 1;";
    $stmt = $conn->prepare($sql);
    
    $stmt->bind_param("s", $email);
    $stmt->execute();   
    $stmt->store_result();  
    $stmt->bind_result($count);
    if($count === 1 OR $count > 0)
        {
            return true;
        } 
        elseif($count === 0) 
        {
            return false;
        }
    $stmt->close(); 
}

然后调用它:

if (sqlCheckUserExists) {
        echo json_encode(array("statusCode"=>201));
    } else {
        echo json_encode(array("statusCode"=>202));
}

查询很好。我只想知道邮件是否已经在表格中。

作为响应,我总是得到“statusCode:201”=“0”或“false”。

【问题讨论】:

  • if($count === 1 OR $count > 0)if($count > 0) 相同
  • 仅供参考,您永远不会执行$stmt->close(),因为您同时返回ifelse if。你应该在if 之前这样做。
  • 你永远不会调用函数:if (sqlCheckUserExists) 应该是 if (sqlCheckUserExists())
  • 你在哪里设置变量$email?也许它应该是一个函数参数?
  • 你在哪里设置变量$conn?那也应该是函数参数,或者使用global $conn;

标签: php mysqli


【解决方案1】:

你错过了 fetch()

$stmt->fetch();

还有$conn

function sqlCheckUserExists($conn) 
{
    $sql = "SELECT COUNT(*) FROM users WHERE email = ?";
    $stmt = $conn->prepare($sql);
    $stmt->bind_param("s", $email);
    $stmt->execute();   
    $stmt->store_result();  
    $stmt->bind_result($count);
    $stmt->fetch();
    $stmt->close();  // close it before return
    return $count > 0; // returns true if count is more than zero else false
 
}

if (sqlCheckUserExists($conn)) {

}

【讨论】:

  • 什么都没改变:响应总是/再次状态代码:202。
  • 您没有收到任何错误吗?你检查过你的mysql查询吗?您是否在 phpmyadmin 中运行它? && 计数 != 0 ???
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 2015-02-28
相关资源
最近更新 更多