【问题标题】:Calling NOW() function in MySQL在 MySQL 中调用 NOW() 函数
【发布时间】:2011-02-13 00:53:29
【问题描述】:

我正在使用 php 对 mysql 进行查询。这是一个:

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

curDate - 日期时间类型。问题是在这个查询之后给定电子邮件的 curDate 是

0000-00-00 00:00:00

怎么了?

【问题讨论】:

  • 显示您的CREATE TABLE 语句,以便我们查看数据类型。此外,使用保留字命名字段是非常糟糕的做法(例如 curDate-记住 sql 不区分大小写),
  • 如果执行:选择NOW();你从 MySql 中得到了什么?

标签: php mysql datetime


【解决方案1】:

您的 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 变量吗?
  • @Ockonal:如果整个字符串都用双引号括起来,则该字符串中的单引号不会阻止 php 变量被解释。
  • "在 MySQL 中字符串必须用单引号括起来,而不是双引号。" - 仅当设置了服务器模式ANSI_QUOTES 时才为真,请参阅dev.mysql.com/doc/refman/5.0/en/string-syntax.html
  • @VolkerK:对不起......你是对的:+1,我删除了那个不正确的行。但是我建议的更改应该仍然有效,因为我假设存在的单引号(但不包括在问题中)将阻止变量被替换到 PHP 中的字符串中。交换单引号和双引号应该可以解决这个问题。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多