注意:只应通过引用传递变量

时间:2016-10-16 15:02:02

标签: php mysql

以下是我的PHP代码。

<?php
session_start();

if(isset($_SESSION['user_id'])) {
    header("Location: /");
}

require 'database.php';

$message = '';

    if(!empty($_POST['email']) && !empty($_POST['password'])):
        //Enter the new user in the database.
        $sql ="INSERT INTO users (email, password) VALUES(:email, :password)";
        $stmt = $conn->prepare($sql);

        $stmt->bindParam(':email', $_POST['email']);
        $stmt->bindParam(':password',password_hash($_POST['password'], PASSWORD_BCRYPT));
        if ($stmt->execute()):
            $message = 'successfully created new user';
        else:
            $message = 'Sorry there must have been an issue creating your an account.';
        endif;
    endif;

显示错误说:

  

注意:在第17行的C:\ xampp \ htdocs \ auth \ register.php中只能通过引用传递变量

在第17行,以下代码如下:

$stmt->bindParam(':password',password_hash($_POST['password'], PASSWORD_BCRYPT));

知道问题是什么以及 只有变量应该通过引用传递 意味着什么?

3 个答案:

答案 0 :(得分:7)

bind_param通过引用获取值。它通过查看您传递的变量并直接指向内部来实现此目的。

在您的调用中,您将返回函数调用的字符串结果 - 在这种情况下为password_hash。因为没有涉及变量,所以没有内脏指向。 PHP因为无法通过引用传递数据而抱怨。

您需要将函数调用的结果粘贴到变量中,然后将该变量传递给bind。

试试这个:

$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$stmt->bindParam(':password',$password );

信用:Here

答案 1 :(得分:2)

    $hashedpassword = password_hash($_POST['password'], PASSWORD_BCRYPT);
    $stmt->bindParam(':password',$hashedpassword );

答案 2 :(得分:-1)

首先制作

$password = password_hash($_POST['password'], PASSWORD_BCRYPT);

然后这个

$stmt->bindParam(':password',$password );