Error de PHP: "No se puede pasar el parámetro 2 por referencia"

Resuelto user1723760 asked hace 54 años • 2 respuestas

Sólo necesito ayuda con este error de PHP que no entiendo del todo:

Error grave: no se puede pasar el parámetro 2 por referencia en /web/stud/openup/inactivatesession.php en la línea 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();

?>

¿Qué significa este error? ¿Cómo se puede solucionar este error?

user1723760 avatar Jan 01 '70 08:01 user1723760
Aceptado

El error significa que se espera que el segundo argumento sea una referencia a una variable .

Como no estás entregando una variable sino un número entero de valor 0 , genera dicho error.

Para evitar esto, haga:

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

En caso de que quieras entender lo que está sucediendo, en lugar de simplemente arreglar tu problema Fatal error, lee esto: http://php.net/manual/en/language.references.pass.php

Gung Foo avatar Oct 28 '2012 00:10 Gung Foo

Primero, no debes usarlo DATE_FORMATcuando quieras comparar la fecha porque DATE_FORMATya no la cambia a cadena, ya no a fecha .

UPDATE Session 
SET Active = ? 
WHERE SessionDate <= ?

En segundo lugar, primero almacene el valor en una variable y páselo al parámetro

$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();
John Woo avatar Oct 28 '2012 00:10 John Woo