严格的标准:只有变量应该通过引用传递 - 为什么这仍然有效,我该如何纠正它?

ali*_*s51 2 php mysql sql

在提交用户详细信息后,我正在尝试查询数据库以检查电子邮件是否已注册。

但是,我收到以下代码(摘录)的“严格标准:仅应通过引用传递变量”错误:

} else  if (isset($_POST['srSubmit']) && $_POST['srEmail']) {

    //check if email already taken
    if ($stmtreg = $mysqli->prepare("SELECT user_email FROM users WHERE user_email = ?")) {
        $stmtreg->bind_param("s", strtolower($_POST['srEmail']));
        $stmtreg->execute();
        $stmtreg->store_result();
        $num_rows = $stmtreg->num_rows();
        $stmtreg->bind_result($email);
        $stmtreg->fetch();
        $stmtreg->close();
    }
Run Code Online (Sandbox Code Playgroud)

我有两个问题:i) 为什么即使出现此错误脚本仍然有效?a ii) 是什么原因造成的,我该如何解决?

谢谢

Pri*_*ner 5

为 设置一个临时变量strtolower($_POST['srEmail']),例如:

$email = strtolower($_POST['srEmail']);
Run Code Online (Sandbox Code Playgroud)

然后传入$email您的bind_param. 即使 strtolower() 返回一个字符串,PDO 也不能引用它,因为它不是一个变量。