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

如何使用PHP插入查询将当前时间戳插入MySQL数据库,php,mysql,timestamp,Php,Mysql,Timestamp,在我的MySQL数据库中,我有一个具有结构的表 username - varchar insert_time - timestamp 该表是使用phpMyAdmin工具在MySQL中创建的,对于insert\u time列,我提到了默认值0000-00-00:00:00 现在的问题是,我以后必须使用PHP脚本用当前时间戳更新这个默认值 我尝试了以下PHP代码: $update_query = 'UPDATE db.tablename SET insert_time=now() '.

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

username - varchar
insert_time - timestamp
该表是使用phpMyAdmin工具在MySQL中创建的,对于
insert\u time
列,我提到了默认值
0000-00-00:00:00

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

我尝试了以下PHP代码:

$update_query = 'UPDATE db.tablename SET insert_time=now() '.
                'WHERE username='.$somename;
当PHP脚本运行时,它会失败,并且无法向数据库中插入任何内容


我做错了什么?

忘记在sql语句中不加引号地放入变量

 $update_query = 
      "UPDATE db.tablename SET insert_time=NOW() WHERE username='" .$somename."'";
您对now()的使用是正确的。但是,您需要在整个查询中使用一种引号,在值中使用另一种引号

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

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

您收到了什么错误消息

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

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

我不喜欢这些解决方案

我就是这样做的:

$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);
}

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

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

$update_query = "UPDATE db.tablename SET insert_time=".$date." WHERE username='" .$somename . "'"; 
除了
NOW()
之外,您还可以使用
UNIX\u TIMESTAMP()

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

我设置了一个自定义错误,如果插入查询失败(在查询中使用“or die()”),则会显示该错误。这是解决方案,但在将变量放入数据库查询之前,应始终转义变量。请将PDO作为一个数据库抽象层进行检查,这会有所帮助,或者在插入它之前至少运行mysql_real_escape_string($somename)。@mjec:你是对的,但我为了避免混乱而忽略了它。OP可能在相关行之前转义输入,或者这可能根本不是用户输入。更好:UNIX_TIMESTAMP()是!这就是问题所在。我想我该睡觉了。这里已经很晚了,伊斯特。否则这些问题将蔓延到整个代码中!!现在()是多余的,使用UNIX_TIMESTAMP()@NitinBansal,你能提供一个链接到MySQL上它说不推荐的地方吗?我找不到任何证据支持你的主张。@Ashburaczenko他没有说这是不赞成的。他说这是多余的。@LeeFuller,多余的意思是没有其他东西,某些东西可以工作。NitinBansal建议立即替换()而不是删除它,所以我认为他们把这些词弄混了。