作为PHP Web应用程序的一部分,我正在使用mysqli和准备好的语句查询MySQL数据库。
我在几个查询中使用了完全相同的代码,并且可以工作,但是在一个特定查询中,它总是返回一个空的记录集。我从MySQL命令行运行了完全相同的查询,它正确返回了结果。我检查了传入的参数,它们很好。
我花了一天的大部分时间来弄清楚为什么我总是得到一个没有错误或警告的空记录集。我已将PHP的错误设置为显示在页面上,并将它们设置为E_ALL | E_STRICT。我仍然没有收到任何警告或错误。
我已经尝试了所有显而易见的事情,例如确保可以实际连接到数据库,检查要传入的参数,并确保要返回的行确实存在于数据库中。我在整个页面上都有var_dump()和die()来检查返回的内容,它始终是合法的,但为空的记录集。
function salt() {
return("I've removed my salt from this sample code");
}
function openDatabase() {
$conn = new mysqli("127.0.0.1", "username", "password", "database")
or die("Error: Could not connect to database.");
return($conn);
}
function checkUserCredentials($username, $password) {
$goodPassword = md5(salt().$username.$password);
$conn = openDatabase();
$query = $conn->stmt_init();
$query->prepare("SELECT id FROM users WHERE email = ? AND passwordHash = ?")
or die('Problem with query');
$query->bind_param("ss", $username, $goodPassword)
or die('Error binding parameters');
$query->execute() or die("Could not execute");
$query->bind_result($col1) or die ("Could not bind result");
if ($col1 !== 0) {
die("Authentication Complete");
} else {
die("Authentication Failure! Number of Rows: ".$query->num_rows." Username: " . $username . " Password Hash: " . $goodPassword);
}
}
感谢任何反馈。我确定我缺少一些简单的东西,但是如果我不剃光头,我马上就会把头发扯掉。
谢谢
我不熟悉mysqli库(我通常使用PDO,它提供了非常相似的跨平台API),所以我无法立即看到任何问题。但是,您可以尝试查看mysqld日志。看到这里的信息:
如果其他人遇到类似问题,如果您在mysqli_stmt对象上运行fetch(),它会[[真的