2012-10-28 11 views
24

po prostu potrzebujesz pomocy w sprawie tego błędu PHP, który ja nie bardzo rozumiem:PHP błąd: „Nie można przekazać parametr 2 przez odniesienie”

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

?> 

Co ten błąd oznacza? W jaki sposób można naprawić ten błąd?

+0

odniesienia dla Ciebie: kwestia ta ma podobny problem http://stackoverflow.com/questions/8287581/how -to-resolve-can-pass-parameter-by-reference-error-in-php # autocomment44785441 – Yoshi

Odpowiedz

65

Błąd oznacza, że ​​drugi argument ma być wartością dla zmiennej.

Ponieważ nie są polecona zmienną ale całkowitą wartość 0, generuje wspomniany błąd.

Aby obejść to zrobić:

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

W przypadku, gdy chcesz, aby zrozumieć, co się dzieje, a nie tylko ustalenie swoją Fatal error, przeczytaj to: http://php.net/manual/en/language.references.pass.php

+4

PHP czasami może być dziwne. –

4

Po pierwsze, nie należy używać DATE_FORMAT gdy chcesz porównać datę, ponieważ DATE_FORMAT zmienia ją na ciąg nie jest już zmieniana,

UPDATE Session 
SET Active = ? 
WHERE SessionDate <= ? 

drugie, przechowywania wartości pierwszy na zmiennej i przekazać go na 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(); 
Powiązane problemy