web-dev-qa-db-fra.com

PHP: "Impossible de passer le paramètre 2 par référence"

J'ai juste besoin d'aide sur cette erreur PHP que je ne comprends pas très bien:

Erreur fatale: impossible de passer le paramètre 2 par référence dans /web/stud/openup/inactivatesession.php sur la ligne 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();

?>

Que signifie cette erreur? Comment cette erreur peut-elle être corrigée?

42
user1723760

L'erreur signifie que le deuxième argument devrait être une référence à une variable .

Puisque vous ne remettez pas une variable mais un entier de valeur 0 , il génère ladite erreur.

Pour contourner cela, procédez comme suit:

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

Si vous voulez comprendre ce qui se passe, au lieu de simplement réparer votre Fatal error, lisez ceci: http://php.net/manual/en/language.references.pass.php

84
Gung Foo

Tout d'abord, vous ne devez pas utiliser DATE_FORMAT lorsque vous souhaitez comparer la date car DATE_FORMAT le change en chaîne et non plus en date,

UPDATE Session 
SET Active = ? 
WHERE SessionDate <= ?

Deuxièmement, stockez d'abord la valeur sur une variable et transmettez-la au paramètre

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