如何使用 PHP 插入查询将当前时间戳插入 MySQL 数据库

Posted

技术标签:

【中文标题】如何使用 PHP 插入查询将当前时间戳插入 MySQL 数据库【英文标题】:How to insert the current timestamp into MySQL database using a PHP insert query 【发布时间】: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()”) 【参考方案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

【讨论】:

以上是关于如何使用 PHP 插入查询将当前时间戳插入 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP 将时间戳以毫秒为单位插入 Postgres 表

怎样手动插入时间 oracle

使用 MySQL/PHP 在字段中使用 now() 插入当前日期/时间

如何使用 Spring JDBC Framework 将“null”时间戳插入 DB2 数据库

从 Python 将 unix 时间戳插入 MySQL [重复]

java 将当前时间戳插入具有时间戳类型的Oracle数据库列