可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I just need help on this PHP error which I do not quite understand:
Fatal error: Cannot pass parameter 2 by reference in /web/stud/openup/inactivatesession.php on line 13
<?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(); ?>
What does this error mean? How can this error be fixed?
回答1:
The error means that the 2nd argument is expected to be a reference to a variable.
Since you are not handing a variable but an integer of value 0, it generates said error.
To circumvent this do:
$update->bind_param("is", $a = 0, $selectedDate); //LINE 13
In case you want to understand what is happening, as opposed to just fixing your Fatal error
, read this: http://php.net/manual/en/language.references.pass.php
回答2:
First,you shouldn't use DATE_FORMAT
when you want to compare date because DATE_FORMAT
changes it to string not date anymore,
UPDATE Session SET Active = ? WHERE SessionDate <= ?
Second, store the value first on a variable and pass it on the paramater
$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();