为了账号安全,请及时绑定邮箱和手机立即绑定

准备好的语句返回错误数 0

准备好的语句返回错误数 0

PHP
繁星淼淼 2021-06-30 21:43:40
问题:我正在设置我的登录系统,它应该允许用户使用用户名或密码登录。但是我的准备语句返回Prepare failed: (0)到控制台(0 是 mysql 错误号)。我试过的:我试过查看 MySQL 手册,看看是什么Error Number 0,但找不到任何东西。<?phpinclude "../includes/config.php";if($_SERVER["REQUEST_METHOD"] == "POST") {        // Can be either the email or username     $login = $_POST['login'];    $password = $_POST['password'];    if ( $login != "" && $password != "" ) {        // Prepare the statement        $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");        // Check Prepare        if ( !$pullLogin->prepare() ) { echo "<script>console.log('Prepare failed: ($pullLogin->errno) $pullLogin->error');</script>"; }        // Bind the parameters to the statement        $pullLogin->bind_param( "ss", $login, $login );        // Execute it :-)        $pullLogin->execute();        // Store the results, I don't really knwo why but whatever        $pullLogin->store_result();        // Bind the password to a variable :-)        $pullLogin->bind_result($correctPassword);        // Free the results        $pullLogin->free_results();        // Close the statement        $pullLogin->close();        // This is hashed and I'm only echoing it to see if ^ works        echo $correctPassword;    }}?>预期:用户可以使用他们的用户名或电子邮件登录。实际结果:准备语句似乎不起作用:/
查看完整描述

1 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

您正在两次调用 prepare()。


在不带参数调用 prepare() 时,您正在 if 条件中执行一个空语句......所以没有什么可做的,也没有错误(错误号 0),但该调用的结果为 false。只需检查第一次准备调用的结果。


更改第二个准备调用:


if ( $login != "" && $password != "" ) {

  // Prepare the statement

  $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");

  // Check Prepare

  if ( !$pullLogin->prepare() ) { echo "<script>console.log('Prepare failed: ($pullLogin->errno) $pullLogin->error');</script>"; }

以下内容,因此您只是在测试第一个 prepare() 的结果:


if ( $login != "" && $password != "" ) {

  // Prepare the statement

  $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");

  // Check Prepare

  if ( !$pullLogin ) { echo "<script>console.log('Prepare failed: ($link->errno) $link->error');</script>"; }



查看完整回答
反对 回复 2021-07-09
  • 1 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信