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

Posted

技术标签:

【中文标题】PHP 错误:“无法通过引用传递参数 2”【英文标题】:PHP error: "Cannot pass parameter 2 by reference" 【发布时间】:2012-10-17 19:23:30 【问题描述】:

我只是需要关于这个我不太明白的 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();

?>

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

【问题讨论】:

给你参考:这个issue有类似的问题***.com/questions/8287581/… 【参考方案1】:

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

由于您处理的不是变量,而是值为0的整数,因此会产生上述错误。

为了规避这个问题:

$a = 0;
$update->bind_param("is", $a, $selectedDate);  //LINE 13

如果您想了解正在发生的事情,而不是仅仅修复您的 Fatal error,请阅读以下内容:http://php.net/manual/en/language.references.pass.php

【讨论】:

PHP 有时会很奇怪。 真的很有趣,因为错误消息似乎表明完全相反 :-) 它说“无法通过引用传递参数 2”,我就像“但我没有将它作为参考传递,所以什么是问题?” 解释很有帮助 【参考方案2】:

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

UPDATE Session 
SET Active = ? 
WHERE SessionDate <= ?

其次,先将值存储在变量中,然后将其传递给参数

$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();

【讨论】:

以上是关于PHP 错误:“无法通过引用传递参数 2”的主要内容,如果未能解决你的问题,请参考以下文章

PHP 致命错误:调用时传递引用已被删除

PHP对象到底是值传递还是引用传递

PHP 5.3.1 的引用传递问题

为啥 PHP 在一种情况下允许将文字传递给按引用传递的参数,而在其他情况下不允许?

[单选题]有关PHP引用的说法,错误的是

password_hash 给出错误:严格标准:只有变量应该通过引用传递[重复]