PHP错误:"无法通过引用传递参数2"

use*_*760 45 php mysql mysqli pdo

我只是需要这个PHP错误的帮助,我不太明白:

致命错误:无法在第13行的/web/stud/openup/inactivatesession.php中通过引用传递参数2

<?php

error_reporting(E_ALL);

include('connect.php');

$createDate = mktime(0,0,0,09,05,date("Y"));
$selectedDate =  date('d-m-Y', ($createDate));

$sql = "UPDATE Session SET Active = ? WHERE DATE_FORMAT(SessionDate,'%Y-%m-%d' ) <= ?";                                         
$update = $mysqli->prepare($sql);
$update->bind_param("is", 0, $selectedDate);  //LINE 13
$update->execute();

?>
Run Code Online (Sandbox Code Playgroud)

这个错误是什么意思?如何解决这个错误?

Gun*_*Foo 87

该错误意味着第二个参数应该是对变量引用.

由于您没有处理变量而是处理值为0整数,因此会生成所述错误.

为了规避这一点:

$update->bind_param("is", $a = 0, $selectedDate);  //LINE 13
Run Code Online (Sandbox Code Playgroud)

如果你想了解发生了什么,而不是仅仅修复你的Fatal error,请阅读:http://php.net/manual/en/language.references.pass.php

  • PHP有时会如此奇怪. (17认同)
  • 真的很有趣,因为错误消息似乎表明完全相反:-)它说“无法通过引用传递参数2”,我想“但我没有将它作为引用传递,所以问题是什么?” (4认同)

Joh*_*Woo 5

首先,您不应该DATE_FORMAT在想要比较日期时使用,因为DATE_FORMAT将其更改为字符串不再是日期,

UPDATE Session 
SET Active = ? 
WHERE SessionDate <= ?
Run Code Online (Sandbox Code Playgroud)

其次,首先将值存储在变量上并将其传递给参数

$createDate = mktime(0,0,0,09,05,date("Y"));
$selectedDate =  date('d-m-Y', ($createDate));
$active = 0;
$sql = "UPDATE Session SET Active = ? WHERE SessionDate <= ?";                                         
$update = $mysqli->prepare($sql);
$update->bind_param("is", $active, $selectedDate);  
$update->execute();
Run Code Online (Sandbox Code Playgroud)