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

问题:我正在设置我的登录系统,它应该允许用户使用用户名或密码登录。但是我的准备语句返回Prepare failed: (0)到控制台(0 是 mysql 错误号)。


我试过的:我试过查看 MySQL 手册,看看是什么Error Number 0,但找不到任何东西。


<?php

include "../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;



    }

}

?>

预期:用户可以使用他们的用户名或电子邮件登录。

实际结果:准备语句似乎不起作用:/


繁星淼淼
浏览 143回答 1
1回答

猛跑小猪

您正在两次调用 prepare()。在不带参数调用 prepare() 时,您正在 if 条件中执行一个空语句......所以没有什么可做的,也没有错误(错误号 0),但该调用的结果为 false。只需检查第一次准备调用的结果。更改第二个准备调用:if ( $login != "" && $password != "" ) {&nbsp; // Prepare the statement&nbsp; $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");&nbsp; // Check Prepare&nbsp; if ( !$pullLogin->prepare() ) { echo "<script>console.log('Prepare failed: ($pullLogin->errno) $pullLogin->error');</script>"; }以下内容,因此您只是在测试第一个 prepare() 的结果:if ( $login != "" && $password != "" ) {&nbsp; // Prepare the statement&nbsp; $pullLogin = $link->prepare("SELECT hashed_password FROM users WHERE (username = '?' OR email='?')");&nbsp; // Check Prepare&nbsp; if ( !$pullLogin ) { echo "<script>console.log('Prepare failed: ($link->errno) $link->error');</script>"; }
打开App,查看更多内容
随时随地看视频慕课网APP