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

问题描述 投票:0回答:3

我只需要有关这个 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();

?>

这个错误是什么意思?如何修复此错误?

php mysqli
3个回答
137
投票

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

由于您传递的不是一个 变量 而是一个 值为 0 的整数 ,因此它会生成所述错误。

要避免这种情况,请执行以下操作:

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

如果您想了解发生了什么,而不是仅仅修复您的

Fatal error
,请阅读以下内容:http://php.net/manual/en/language.references.pass.php


4
投票

首先,当你想比较日期时,你不应该使用

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

0
投票

如果您使用的是 PHP 7.4 或更高版本,那么有一个替代解决方案来创建一大堆以后不再使用的变量,只是为了满足

bind_param
这个奇怪的要求。

您可以将扩展运算符 (

...
) 与数组一起使用:

$update->bind_param("is", ...[0, $selectedDate]);

在数组中,您可以使用任何变量、文字、常量等,没有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.