我正在努力将我的代码从使用MySQL更改为MySQLi,并且它的所有似乎都很顺利,但我遇到了一些问题,我目前只是在改变在我的功能 user_exists 上,我尝试了解不同的原因以及出现了什么问题,但它似乎是查询,我做了 var_dump($ result)并得到了回复 NULL 并被告知它下到我的查询然后,所以我尝试在phpmyadmin上进行sql搜索并得到一个结果,所以我想它归结为我绑定 $ username 到?因为我得到的错误是找不到我试图登录的用户名。
function user_exists($username) {
$db = $GLOBALS['db'];
$username = trim($username);
//sql
$sql = "SELECT COUNT(`user_id`) FROM `users` WHERE `username` = ?";
//Prepare
$result = $db->prepare($sql);
//Bind
$result->bind_param('s', $username);
//execute
$result->execute();
//Bind-Results - the 2 codes below are noted out cause im not sure they are needed but have tried with and without them
//$result->bind_result($user_id);
//$result->fetch();
if (false === $result) {
return false;
}
return ($result->num_rows === 1);
}
我可以将代码提供给我的signin.php,但是我不确定它是否有用,因为在我开始更改函数之前一切正常。
如果有人可以指出它不起作用的地点,地点和原因,请你解释一下,这样我就能理解,所以我对未来有好处,也许能够帮助别人。
答案 0 :(得分:0)
在检查行数之前,您需要调用$result->store_result()
。 mysqli_stmt::store_result()
将从预准备语句加载结果集,以便您可以访问结果和属性。
编辑:这是我如何做到的(未经测试):
function user_exists($username) {
global $db;
//sql
$sql = "SELECT `user_id` FROM `users` WHERE `username` = ?";
//Prepare
if (!($result = $db->prepare($sql)) return false;
//Bind
if (!$result->bind_param('s', trim($username))) return false;
//execute
if (!$result->execute()) return false;
//Bind-Results
$result->bind_result($user_id);
$result->fetch();
$result->close();
return $user_id ?: false;
}
答案 1 :(得分:0)
以下是 user_exist()功能的结果
function user_exists($username) {
$db = $GLOBALS['db'];
//sql
$sql = "SELECT user_id FROM `users` WHERE `username` = ?";
//Prepare
$result = $db->prepare($sql);
//Bind
$result->bind_param('s', $username);
//execute
$result->execute();
//store result
$result->store_result();
if (false === $result) {
return false;
}
return ($result->num_rows === 1);
}
我希望这会对某人有所帮助。但是,如果任何代码不应该在那里,我提前道歉,代码是有一个原因在某一点,但由于我还在学习这一切,没有人告诉我,它不应该在那里..希望它有帮助< / p>