1

我有一个最奇怪的问题,我可以弄清楚发生了什么。没有显示错误,我已经var_dump编辑$stmt了,for 将不会返回任何内容。

我试图检索的测试数据是正确的,当我通过 phpmyadmin 手动尝试该语句时,它会非常完美,所以我很难有任何想法?

$sql = "SELECT UserID,Password FROM Account WHERE ProfileName = ? OR  Email = ? LIMIT 1";
$stmt = $conn->prepare($sql);
$username = strtolower($username);
$stmt->bind_param('ss', $username, $username);
$stmt->bind_result($userID, $dbPassword);
$stmt->execute();
$stmt->fetch();
4

1 回答 1

2

bind_result()通话必须在之后而execute()不是之前进行。

改成:

$stmt->bind_param('ss', $username, $username);
$stmt->execute();
$stmt->bind_result($userID, $dbPassword);
$stmt->fetch();

手册

请注意,必须在 mysqli_stmt_execute() 之后和调用 mysqli_stmt_fetch() 之前绑定所有列。

prepare()此外,您可以通过检查是否成功,然后检查是否有任何行来缩小问题范围:

if($stmt = $conn->prepare($sql))
{
    $stmt->bind_param('ss', $username, $username);
    $stmt->execute();
    $stmt->bind_result($userID, $dbPassword);

    if($stmt->num_rows > 0)
    {
        $stmt->fetch();
    }
    else
    {
         echo 'Query succeeded, but no rows found!';
    }
}
else
{
    echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
    // use trigger_error() not echo in production, after development
}

如果prepare()失败,则表示查询中存在连接错误、语法错误或缺少表/字段名称。

于 2013-06-17T12:38:15.983 回答