MySQL使用PHP将DATETIME更新为NOW()

时间:2015-05-08 15:35:10

标签: php mysql datetime sql-update

在我添加更新“last_update”的部分之前,这一切都有效。

if((time() - $last_update) > 7200){
$sql = $dbh->prepare("UPDATE item_list SET quantity=:quantity, price=:price, last_update=:now WHERE item_name=:itemname");
                $sql->bindParam(':quantity', $json->volume);
                $sql->bindParam(':price', $json->lowest_price);
                $sql->bindParam(':itemname', $row['Item_Name']);
                $sql->bindParam(':now', "NOW()");  //This doesn't work
                $sql->execute();
}

当调用此函数时,我想立即将last_update设为日期和时间。在数据库中它当前是DATETIME,当我last_update时,我将它们原始地设置为NOW();

这样做我收到错误致命错误:无法通过引用传递参数2 ....目录

我知道它需要一个变量,但我不知道如何修复它。我试过设置

$now = "NOW()"; $sql->bindParam(':now', $now);

不流行。有什么帮助吗?

3 个答案:

答案 0 :(得分:4)

为什么你需要绑定,只需直接放入NOW()

$sql = $dbh->prepare("UPDATE item_list SET quantity=:quantity, price=:price, last_update=now() WHERE item_name=:itemname");

答案 1 :(得分:0)

如果您的last_update列正在查找UNIX时间戳,请执行:

$now = time(); 
$sql->bindParam(':now', $now);

如果它采用不同的时间格式,请使用date(),并使用相关格式设置日期和时间

答案 2 :(得分:0)

您可以保持绑定查询原样&从查询中删除last_update列。

由于您是通过其他查询更新记录中的其他内容,因此您可以将字段last_update的默认值设置为CURRENT_TIMESTAMP&将其属性设置为ON UPDATE CURRENT_TIMESTAMP。这将确保每当更新该记录时,它会使用当前时间now()自动更新。

正如你正确地说防止SQL注入尝试一样,删除bind()并不是最好的事情。