我有一个最奇怪的问题,我可以弄清楚发生了什么。没有显示错误,我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();
答案 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()
失败,则表示查询中存在连接错误,语法错误或缺少表/字段名称。