mysqli php sql语句不执行

时间:2013-06-17 12:28:32

标签: php sql mysqli

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

我想要检索的测试数据是正确的,当我通过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();

1 个答案:

答案 0 :(得分:2)

bind_result()来电必须在execute()之前完成。

更改为:

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

来自Manual

  

请注意,所有列必须在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()失败,则表示查询中存在连接错误,语法错误或缺少表/字段名称。