为什么此UPDATE预处理语句不起作用,但是在SQL db中使用时起作用

时间:2019-01-25 22:48:23

标签: php mysql mysqli bindparam

我有以下声明:

$stmt = $con->prepare("UPDATE accounts SET loggedin = ? WHERE TIMESTAMPDIFF(SECOND,lastcheck, NOW()) >= ? AND loggedin = ?");
$stmt->bind_param('iii', 0, 61, 0);

它给出500 internal server error。当我在运行这样的sql的phpmyadmin上尝试相同时:

UPDATE accounts SET loggedin = 0 WHERE TIMESTAMPDIFF(SECOND,lastcheck, NOW()) >= 61 AND loggedin = 1

工作正常。

我的问题在哪里?

这是我的错误:

  

PHP致命错误:未捕获错误:无法通过引用传递参数2

1 个答案:

答案 0 :(得分:2)

bind_param不接受值,仅接受参数。您需要使用变量。像这样:

$stmt->bind_param('iii', $s, $ss, $sss); 
$s = 0;
$ss= 61;
$sss = 0;

应该解决它。