为什么此 UPDATE 准备语句不起作用,但在 SQL db 中使用时有效

Why does this UPDATE prepared statement doesn't work, but works when used in SQL db

我有以下声明:

$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。当我在 phpmyadmin 运行 上尝试相同时,sql 是这样的:

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

工作没有任何问题。

我的问题在哪里?

这是我的错误:

PHP Fatal error: Uncaught Error: Cannot pass parameter 2 by reference

bind_param 不接受值,它只接受参数。您需要使用变量。类似于:

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

应该解决了。