Search code examples
phpmysqlmysqlibindparam

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


I have the following statement:

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

And it gives 500 internal server error. When I tried the same on phpmyadmin running the sql thing like this:

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

Worked without any problems.

Where is my problem?

Here's my error:

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


Solution

  • bind_param doesn't take values, it only takes parameters. You need to use variables. Something like:

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

    should resolve it.