Php 用户_使用mysqli存在函数

Php 用户_使用mysqli存在函数,php,mysql,mysqli,Php,Mysql,Mysqli,我;我正在努力将我的代码从MySQL改为MySQLi,一切似乎都很顺利,但我遇到了一点麻烦,我目前一直在改变我的函数user_exists,我尝试寻找不同的原因以及出现问题的原因,但似乎是查询,我做了var_dump$result,得到了空响应,然后被告知这取决于我的查询,所以我尝试了在phpmyadmin上进行sql搜索,得到了一个结果,所以我认为这取决于我将$username绑定到?因为我得到的错误是它找不到我试图登录的用户名 function user_exists($username)

我;我正在努力将我的代码从MySQL改为MySQLi,一切似乎都很顺利,但我遇到了一点麻烦,我目前一直在改变我的函数user_exists,我尝试寻找不同的原因以及出现问题的原因,但似乎是查询,我做了var_dump$result,得到了空响应,然后被告知这取决于我的查询,所以我尝试了在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,但我不确定它是否有用,因为在我开始更改函数之前,所有这些都工作正常

如果有人能指出它不起作用的地方和原因,请你解释一下,以便我能理解,这样我对未来很好,也许可以帮助其他人。

在检查行数之前,你需要调用$result->store\u 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;
}
下面是我的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);
}

我希望这能帮助别人。但是,如果有任何代码不应该在那里,我提前道歉,代码在那里有一个原因,但当我仍然了解这一切,没有人建议我它不应该在那里。。希望它有帮助

看起来应该有用。如果有,就去做$结果echo$db->错误;就在prepare电话之后。@MichaelBerkowski什么也没发生,这真的让我很困惑,我想我终于明白了所有mysqli的东西,准备和绑定,还有其他什么。因为这个函数在它自己的页面上,我想在signin.php页面上做这个函数,看看这是否会删除myabe制作的$username没有出现的任何内容。你有错误报告并显示吗?早些时候可能发生了其他事情。错误报告全部;ini设置“显示错误”,1;是的,我所做的只是把它改成如果$result echo‘工作’;这确实发生了,所以一定有什么东西在起作用?当我尝试回显$result时,我得到的类mysqli_stmt的错误对象无法转换为字符串。。这意味着要通过什么?您不需要调用$result->store\u result;在检查行数之前?我已经有一段时间没有PDO了…所以我添加了您建议的内容,但它所做的只是将任何用户名/密码组合用于登录,这是因为您正在执行SELECT COUNTuser_id,它将始终返回一行。只需选择user_id即可。好吧,我现在会改变这一点,同时,我在网上找到了这个,它显然对那个人有效,它会有效吗?还是我最好坚持目前的方式,并改为修复它?。。。函数user_存在$username,$db{$sql=从username=?;$result=$db->prepare$sql;$result->bind_参数',$username;$result->execute;$result->fetch_行;return$result[0]==1?true:false;}我认为这两种方式都没有区别;要么读取计数,要么检查行数。我总是希望函数返回有用的值,如果我自己这样做的话,我会让它返回用户id。我得到了这个解析错误:当运行你的建议时,但是你的建议确实解决了问题,所以谢谢,我将标记为已回答