2011-11-27 114 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

我试过了。不工作。我也清除了浏览器缓存。 –

相关问题