PHP- PDO 只有变量应该按引用传递

3
当我在我的网站上尝试注册时,出现了以下错误信息:严格标准:仅应传递变量。你能看出我的代码有什么问题吗?
 public static function create(user $user){
        $conn= DataBase::getDB();

        $stmt=$conn->prepare("INSERT INTO `institute`.`user` (`id`, `name`, `surname`, `username`, `password`, `email`, `registration_number`) "
                . "VALUES ('', :name, :surname, :username, :password, :email, :registration_number)");

        $stmt->bindParam(':name', $user->getName());
        $stmt->bindParam(':surname', $user->getSurname());
        $stmt->bindParam(':username', $user->getUsername());
        $stmt->bindParam(':password', $user->getpassword());
        $stmt->bindParam(':email', $user->getEmail());
        $stmt->bindParam(':registration_number', $user->getRegistration_number());



       $stmt->execute();

    }

1
简而言之,bindParam() 函数的第二个参数是一个引用。你可以传递一个方法结果。但你可能想要使用 bindValue() 函数。详见 http://php.net/manual/zh/pdostatement.bindvalue.php。 - AbraCadaver
2个回答

5

http://us3.php.net/manual/en/pdostatement.bindparam.php

public bool PDOStatement::bindParam ( mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )

注意第二个变量的类型为mixed,并通过引用传递。

在您的情况下,您正在尝试将一个函数传递到该变量中。函数无法通过引用传递。

您需要更改代码,将它们视为类属性或在将它们传递给bindParam之前将它们设置为变量。

例如:

$userName = $user->getName();
$stmt->bindParam(':name', $userName);

你可以使用bindValue方法: http://us3.php.net/manual/en/pdostatement.bindvalue.php

@FernandoRamos 根据您的 $user 类,您可以通过 json_encode 将其转换为 JSON 对象,然后使用 json_decode 将其转换为关联数组。这样,您就不必手动指定各种 getter 方法的所有变量了。 - ivanivan

4

bindParam()

$username = $user->getName();
$stmt->bindParam(':name', $username);


bindValue()

$stmt->bindValue(':name', $user->getName());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接