【问题标题】:Prepared-statement MySQLI: INSERT doesn't work [duplicate]准备好的语句 MySQLI:INSERT 不起作用[重复]
【发布时间】:2016-08-12 07:20:40
【问题描述】:

我是一名编码初学者,无法解决此错误。我尝试创建登录/注册脚本,但我的 INSERT 语句不起作用,我找不到错误:/对不起,我的英语不好,我我是德国人。

“致命错误:在布尔输入上调用成员函数 bind_param()”

  if (isset($_POST['registrieren']) && $_POST['name'] != "" && $_POST['password'] != "")
  {
    $url        = 'https://www.google.com/recaptcha/api/siteverify';
    $privateKey = "???????????????????????????";

    $response = file_get_contents($url . "?secret=" . $privateKey . "&response=" . $_POST['g-recaptcha-response'] . "&remoteip=" . $_SERVER['REMOTE_ADDR']);
    $data     = json_decode($response);

    if (isset($data->success) && $data->success == true)
    {
        $name            = $_POST['name'];
        $password        = $_POST['password'];
        $username_exists = $db->prepare("SELECT name from users WHERE name = ? ");
        $username_exists->bind_param('s', $name);
        $username_exists->execute();

        if ($username_exists->num_rows) {
            echo "<div class='fehler'>Name bereits vergeben!</div>";
        } else {
            $verschlüsseln = password_hash($password, PASSWORD_DEFAULT);
            $insert = $db->prepare("INSERT INTO users (name, password) VALUES (?, ?)");
            $insert->bind_param("ss", $name, $verschlüsseln);  
            $insert->execute();
            $_SESSION['name'] = $name;
            $_SESSION['password'] = $password;
            header("Location: http://localhost/data/login/me.php");
        }
    } else {
      echo "<div class='fehler'>Captcha-Check failed!</div>";
    }
}

【问题讨论】:

  • bind_param 3 个参数中,但在INSERT 中只有2 个
  • 您是否在数据库中检查过是否插入了数据。
  • 在哪里可以看到 3 个参数? $insert->bind_param("ss", $name, $verschlüsseln); $insert->bind_param("ss", $name, $verschlüsseln);
  • 在上面的代码中(但可能不是真正的代码)你缺少一个右花括号
  • @DhavalPurohit 没有插入任何内容

标签: php sql mysqli prepared-statement


【解决方案1】:

错误提示prepare 语句失败,但不清楚是哪一个。下面的代码未经测试,我想知道u 上的重音是否会导致问题(?)所以我将该变量重命名为$hash

<?php

    if( !empty( $_POST['registrieren'] ) && !empty( $_POST['name'] ) && !empty( $_POST['password'] ) && !empty( $_POST['g-recaptcha-response'] ) ){

        $url        = 'https://www.google.com/recaptcha/api/siteverify';
        $privateKey = "6LdBNScTAAAAALrn5__S9lfV3EuSFu9Si_gwWeus";
        $response   = file_get_contents( $url . "?secret=" . $privateKey . "&response=" . $_POST['g-recaptcha-response'] . "&remoteip=" . $_SERVER['REMOTE_ADDR'] );
        $data       = json_decode( $response );


        if( isset( $data->success ) && $data->success == true ) {
            $name           = $_POST['name'];
            $password       = $_POST['password'];
            $stmt           = $db->prepare("SELECT `name` from `users` WHERE `name` = ?;");

            if( !$stmt ){
                exit('Error preparing sql select statement');
            }

            $stmt->bind_param( 's', $name );
            $stmt->execute();


            if ( $stmt->num_rows ) {

                echo "<div class='fehler'>Name bereits vergeben!</div>";

            } else {

                /* release results from previous cmd */
                $stmt->free_result();

                /* Is it possible that the accent on the 'u' caused problems? */
                $hash = password_hash( $password, PASSWORD_DEFAULT );

                $stmt = $db->prepare( "INSERT INTO `users` (`name`, `password`) VALUES (?, ?);" );
                if( !$stmt ){
                    exit('Error preparing sql insert statement');
                }
                $stmt->bind_param( "ss", $name, $hash );  
                $stmt->execute();

                /* again, free the results */
                $stmt->free_result();

                /* do you really want to store a password in a session variable? */
                $_SESSION['name'] = $name;
                $_SESSION['password'] = $password;


                header("Location: http://localhost/data/login/me.php");
            }
        } else {
            echo "<div class='fehler'>Captcha-Check failed!</div>";
        }
    }
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 2015-10-11
    相关资源
    最近更新 更多