Php 在MySQL中调用NOW()函数

Php 在MySQL中调用NOW()函数,php,mysql,datetime,Php,Mysql,Datetime,我使用php查询mysql。这里有一个: UPDATE `subscribers` SET `curDate` = NOW() WHERE `e_mail` = "$resEmail" curDate-日期时间类型。问题是,在此查询之后,给定电子邮件的日期是 0000-00-00 00:00:00 怎么了?您的PHP现在可能是这样的: $sql = 'UPDATE `subscribers` SET `curDate` = NOW() WHERE `e_mail` = "$resEmail"

我使用php查询mysql。这里有一个:

UPDATE `subscribers` SET `curDate` = NOW() WHERE `e_mail` = "$resEmail"
curDate-日期时间类型。问题是,在此查询之后,给定电子邮件的日期是

0000-00-00 00:00:00

怎么了?

您的PHP现在可能是这样的:

$sql = 'UPDATE `subscribers` SET `curDate` = NOW() WHERE `e_mail` = "$resEmail"';
单引号防止变量的值被替换到字符串中。您需要将其更改为:

$sql = "UPDATE `subscribers` SET `curDate` = NOW() WHERE `e_mail` = '$resEmail'";
您还应该注意,此处可能存在SQL注入漏洞。考虑使用以逃避电子邮件地址。

$sql = "UPDATE `subscribers` SET `curDate` = NOW() WHERE `e_mail` = '" .
       mysql_real_escape_string($resEmail) . "'";

由于您使用的是基于正确时间戳的timedate函数,请尝试将其设置为
timestamp(Now())

是否可以在单引号中插入php变量?@Ockonal:如果整个字符串都在双引号中,则该字符串中的单引号不会阻止对php变量进行解释。“在MySQL中,字符串必须用单引号括起来,而不是双引号。”-只有在设置了服务器模式
ANSI_quotes
时才是真的,请参阅@VolkerK:Sorry…你是对的:+1,我删除了不正确的行。但是我建议的更改应该仍然有效,因为我假设的单引号存在(但不包括在问题中)将防止在PHP中将变量替换为字符串。交换单引号和双引号应该可以解决此问题。显示
CREATE TABLE
语句,以便我们可以查看数据类型。此外,如果执行:select NOW(),则使用保留字命名字段是非常糟糕的做法(如curDate-记住sql不区分大小写);你从MySql中得到了什么?