PHP登录系统在本地工作,但不';不要在Hostgator PHP7.2上工作

PHP登录系统在本地工作,但不';不要在Hostgator PHP7.2上工作,php,mysqli,Php,Mysqli,PHP登录系统在本地上工作,但在Hostgator PHP7.1上不工作。我的本地版本是PHP7.2 我已经在本地机器上建立了一个完整的工作门户。我可以在我的本地机器上清除积垢。我一把它放到服务器上,登录系统就不工作了。我仍然可以在数据库中填充用户信息时注册新用户,因此这不是数据库配置问题。我发现以下错误: 警告:mysqli_stmt_bind_param():变量的数量与..中准备好的语句中的参数数量不匹配 致命错误:未捕获错误:在…中调用未定义的函数mysqli\u stmt\u get\

PHP登录系统在本地上工作,但在Hostgator PHP7.1上不工作。我的本地版本是PHP7.2

我已经在本地机器上建立了一个完整的工作门户。我可以在我的本地机器上清除积垢。我一把它放到服务器上,登录系统就不工作了。我仍然可以在数据库中填充用户信息时注册新用户,因此这不是数据库配置问题。我发现以下错误:

警告:mysqli_stmt_bind_param():变量的数量与..中准备好的语句中的参数数量不匹配

致命错误:未捕获错误:在…中调用未定义的函数mysqli\u stmt\u get\u result()

我花了5个小时试图弄明白为什么它在Hostgator服务器上不能工作,但在我的本地服务器上可以工作

这是我的密码:

if(isset($_POST['loginSubmit'])){

    //include connection configs
    require '../../db_configs.php';

    $email = mysqli_real_escape_string($conn, $_POST['email']);
    $password = mysqli_real_escape_string($conn, $_POST['password']);   

    if(empty($email || $password )){

        header("Location: ../../../portalSignIn.php?signin=fieldsempty");
        exit();

    }
    else
    {
        //user email query
        $sqlEmail = "SELECT * FROM users WHERE email='$email'";
        $emailResult = mysqli_query($conn, $sqlEmail);
        $stmt = mysqli_stmt_init($conn);

        //SQL Error
        if(!mysqli_stmt_prepare($stmt, $sqlEmail)){

            header("Location: ../../../portalSignIn.php?signin=SQL_FAILED");
            exit();

        }
        if(mysqli_num_rows($emailResult) == 0){

            //email doesn't exist
            header("Location: ../../../portalSignIn.php?signin=incorrectemail");
            exit();
        }
        else
        {   
            //bind data if email exists
            mysqli_stmt_bind_param($stmt, "s", $email);
            mysqli_stmt_execute($stmt);
            $result = mysqli_stmt_get_result($stmt);

            if($row = mysqli_fetch_assoc($result)){....
它在这一点上被打破了-->
mysqli_stmt_bind_param($stmt,“s”,$email)


我已经调查过了,Hostagtor没有这些设置。我在注册页面上成功地使用了mysqli\u stmt\u bind\u param()

您的代码中有很多错误。让我向你解释其中的一些

  • 不要使用
    mysqli\u real\u escape\u string()
    对变量进行转义。只是完全不要使用这个函数
  • empty($email | |$password)
    将检查布尔值。这没有多大意义。删除
    empty
    调用并检查否定。如果既不是
    $email
    也不是
    $password
    ,则其中一个为空
  • 不要使用
    mysqli\u查询
    。您将准备一条语句,因此不要调用此函数。您还需要参数化SQL。使用
    作为值的占位符
  • mysqli\u num\u rows
    在此位置将抛出错误。你根本不需要这个函数。如果要使用它,需要将
    get\u result()
  • 要使用prepared语句获取值,您需要准备/bind/execute/get_result。只有在该行存在时,才能获取该行。如果未返回任何内容,则
    $record
    将为空
    和往常一样,不要忘记启用mysqli错误报告。请参见

    我遇到的问题是,Hostgator没有可供共享主机用户使用的mysqlnd,而只有那些具有VPS或专用服务器的用户:

    可以为其他用户启用该功能,并且可以按照本教程执行说明:


    这是一堂学习课,尤其是在了解你的网络主机方面

    你的SQL语句没有绑定参数。这段代码有太多问题…我从一个在线教程中学习,因为后端对我来说是新的。另外,我想知道为什么它在本地计算机上工作正常,但在服务器上安装时却不正常。而且,看起来你的托管服务器可能配置错误<代码>调用未定义的函数mysqli\u stmt\u get\u result听起来好像您关闭了mysqlnd。感谢您的代码审阅,但本线程的重点是为什么它可以在我的本地计算机上运行,而不能在Hostgator服务器上运行。如果它可以在您的本地计算机上运行,我会感到惊讶。你可能很幸运。然而,我无法想象它是如何工作的。它会抛出一堆错误,然后痛苦地死去。我把你的代码放到我的代码中,它在我的本地服务器上工作。然而,一旦我将其部署到Hostgator,我现在就得到了“未捕获的错误:调用未定义的方法mysqli_stmt::get_result()”。Hostgator没有像此网站示例中那样为我设置勾选框:
    if (isset($_POST['loginSubmit'])) {
    
        //include connection configs
        require '../../db_configs.php';
    
        $email = $_POST['email'];
        $password = $_POST['password'];
    
        if (!$email || !$password) {
            header("Location: ../../../portalSignIn.php?signin=fieldsempty");
            exit();
        } else {
            //user email query
            $sqlEmail = "SELECT * FROM users WHERE email=?";
            $stmt = $con->prepare($sqlEmail);
            $stmt->bind_param('s', $email);
            $stmt->execute();
            $result = $stmt->get_result();
            $record = $result->fetch_assoc();
            if (!$record) {
                //email doesn't exist
                header("Location: ../../../portalSignIn.php?signin=incorrectemail");
                exit();
            } else {
                // handle your data here
            }
        }
    }