如何使用 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 表
使用 MySQL/PHP 在字段中使用 now() 插入当前日期/时间
如何使用 Spring JDBC Framework 将“null”时间戳插入 DB2 数据库