2011-11-27 40 views
8

這裏是我的代碼:如何在PHP中解決'無法通過引用傳遞參數'錯誤?

$stmt = $conn->mysqli->prepare('INSERT INTO photos (CaseNo, ImageName, CaptureTime, UploadTime) VALUES (?,?,?,?)'); 
$stmt->bind_param('isss', $caseno, $index.'.'.$extension, date('Y-m-d H:i:s'), date('Y-m-d H:i:s')); 

我已經試過這也:

$stmt = $conn->mysqli->prepare('INSERT INTO photos (CaseNo, ImageName, CaptureTime, UploadTime) VALUES (?,?,?,?)'); 
$captureTime = date('Y-m-d H:i:s'); 
$uploadTime = date('Y-m-d H:i:s'); 
$stmt->bind_param('isss', $caseno, $index.'.'.$extension, $captureTime, $uploadTime); 

我收到錯誤:

Fatal error:** Cannot pass parameter 3 by reference in **...file path...line #

請注意,CaptureTimeUploadeTime有數據類型日期。而忽略了我傳遞第三和第四參數的值相同的事實。

代碼有什麼問題?

+0

[PHP mysqli包裝:通過引用傳遞__call()和call_user_func_array()]的可能重複(http://stackoverflow.com/questions/2566289/php-mysqli-wrapper-passing-by-reference-with- call-and-call-user-func-array) – ajreal

+0

參考爲:此問題有類似問題 http://stackoverflow.com/questions/13105373/php-error-cannot-pass-parameter-2-通過引用 – Yoshi

+0

[PHP錯誤:「無法通過引用傳遞參數2」](https://stackoverflow.com/questions/13105373/php-error-cannot-pass-parameter-2-by-reference) –

回答

24

變化

$stmt->bind_param('isss', $caseno, $index.'.'.$extension, $captureTime, $uploadTime); 

$isss = 'isss'; 
$indexExtention = $index.'.'.$extension 
$stmt->bind_param($isss, $caseno, $indexExtention , $captureTime, $uploadTime); 

我相信你有傳遞變量而不是字符串。

或者如果您使用的是PDO,則可以使用bindvalue()而不是bindparam()

+0

非常感謝。這工作。 –

+0

你確定mysqli語句支持** bindvalue ** function()嗎?在php.net上的mysqli manaul,我沒有看到這個功能。 –

+0

啊,沒有。只有PDO似乎支持它。我以爲MySQLi也是。 –

-1

也許你需要將它轉換爲字符串?

...$extension, (string) $captureTime, (string) $uploadTime); 
+0

我試過了。不工作。我也清除了瀏覽器緩存。 –