user_exists函数使用mysqli

时间:2014-02-19 20:19:03

标签: php mysql mysqli

我正在努力将我的代码从使用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,但是我不确定它是否有用,因为在我开始更改函数之前一切正常。

如果有人可以指出它不起作用的地点,地点和原因,请你解释一下,这样我就能理解,所以我对未来有好处,也许能够帮助别人。

2 个答案:

答案 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>