在MySQL中调用NOW()函数

3
我正在使用PHP来查询MySQL。以下是一个示例查询:
UPDATE `subscribers` SET `curDate` = NOW() WHERE `e_mail` = "$resEmail"

curDate - DateTime类型。问题在于,在此查询之后,给定电子邮件的curDate是

0000-00-00 00:00:00

有什么问题吗?


1
展示你的CREATE TABLE语句,这样我们就可以看到数据类型。此外,用保留字命名字段是非常不好的做法(比如curDate-请记住SQL不区分大小写)。 - dnagirl
如果你执行:select NOW(); 从MySql中会得到什么? - AlG
2个回答

5

你的PHP代码可能看起来像这样:

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

单引号将变量的值从字符串中排除。您需要将其更改为以下内容:

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

您还需要注意,此处可能存在SQL注入漏洞。考虑使用mysql_real_escape_string来转义电子邮件地址。

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

我可以在单引号中插入PHP变量吗? - Max Frai
@Ockonal:如果整个字符串都在双引号中,那么该字符串内的单引号不会阻止 PHP 变量被解释。 - Mark Byers
1
在MySQL中,字符串必须用单引号而不是双引号括起来,但仅当服务器模式ANSI_QUOTES被设置时才是正确的。请参阅http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html。 - VolkerK
@VolkerK:抱歉...你是对的:+1,我删除了那行错误的代码。但是我建议的更改仍然有效,因为我假设有单引号(但未包含在问题中),这将防止变量被替换为PHP字符串。交换单引号和双引号应该可以解决这个问题。 - Mark Byers

0

由于您正在使用基于正确时间戳的timedate函数,请尝试使用Timestamp(Now())进行设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接