【问题标题】:How to insert the current timestamp into MySQL database using a PHP insert query如何使用 PHP 插入查询将当前时间戳插入 MySQL 数据库
【发布时间】:2011-08-29 21:00:30
【问题描述】:

在我的 MySQL 数据库中,我有一个结构表

username - varchar
insert_time - timestamp

这个表是在 MySQL 中使用 phpMyAdmin 工具创建的,对于insert_time 列,我提到了默认值为0000-00-00 00:00:00

现在的问题是,我必须稍后使用 PHP 脚本将这个默认值更新为当前时间戳。

我尝试执行以下 PHP 代码:

$update_query = 'UPDATE db.tablename SET insert_time=now() '.
                'WHERE username='.$somename;

PHP 脚本运行时失败,无法向数据库中插入任何内容。

我做错了什么?

【问题讨论】:

  • 我已经设置了在插入查询失败时显示的自定义错误(在查询中使用“or die()”)

标签: php mysql timestamp


【解决方案1】:

你得到什么错误信息?

我猜你的实际错误是因为你的 php 变量没有用引号括起来。试试这个

$update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" .$somename . "'"; 

【讨论】:

  • 是的!这就是问题所在。我想我现在应该睡觉了。这里是深夜,IST。否则这些问题会蔓延到整个代码!!
  • NOW() 是多余的,使用 UNIX_TIMESTAMP()
  • @NitinBansal,你能提供一个链接到它说不推荐使用的 MySQL 吗?我找不到任何证据证明您的说法。
  • @AshBurlaczenko 他没有说它已被弃用。他说这是多余的。
  • @LeeFuller,冗余意味着某些东西可以在没有其他东西的情况下工作。 NitinBansal 建议替换 now() 而不是删除它,所以我认为他们把词弄混了。
【解决方案2】:

此格式用于获取当前时间戳并存储在mysql中

$date = date("Y-m-d H:i:s"); 

$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'"; 

【讨论】:

    【解决方案3】:

    您对 now() 的使用是正确的。但是,您需要在整个查询周围使用一种类型的引号,而在值周围使用另一种类型的引号。

    您可以修改查询以在开头和结尾使用双引号,并在 $somename 周围使用单引号:

    $update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='$somename'";
    

    【讨论】:

    • 这是解决方案,但您应该始终在将变量放入数据库查询之前对其进行转义。查看 PDO php.net/pdo 作为数据库抽象层,它可以帮助解决这个问题,或者至少在插入之前运行 mysql_real_escape_string($somename)。
    • @mjec:你是对的,但为了避免混乱,我把它省略了。 OP 可能会在相关行之前转义输入,或者这可能根本不是用户输入。
    • 更好:UNIX_TIMESTAMP()
    【解决方案4】:

    忘了把变量放在sql语句中不带引号。

     $update_query = 
          "UPDATE db.tablename SET insert_time=NOW() WHERE username='" .$somename."'";
    

    【讨论】:

      【解决方案5】:

      不喜欢这些解决方案。

      这就是我的做法:

      $update_query = "UPDATE db.tablename SET insert_time=now() WHERE username='" 
                  . sqlEsc($somename) . "' ;";
      

      然后我使用我自己的 sqlEsc 函数:

      function sqlEsc($val) 
      {
          global $mysqli;
          return mysqli_real_escape_string($mysqli, $val);
      }
      

      【讨论】:

        【解决方案6】:

        您也可以使用UNIX_TIMESTAMP() 代替NOW()

        $update_query = "UPDATE db.tablename 
                         SET insert_time=UNIX_TIMESTAMP()
                         WHERE username='$somename'";
        

        Difference between UNIX_TIMESTAMP and NOW() in MySQL

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-06
          • 1970-01-01
          • 2019-08-21
          • 1970-01-01
          • 2016-07-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多