无法弄清楚mysql的datetime

时间:2013-01-22 14:31:44

标签: php datetime

所以我在最愚蠢的情况下把我的头发拉出来...我正在努力为MySQL数据库节省新的时间并尝试了我能想到的所有工作,但我可以'由于某种原因。这就是我所拥有的......

$_ = gmdate("Y-m-d H:i:s",time());
if (! mysql_query("UPDATE Accounts 
    SET likes='1',update='".$_."' 
    WHERE username='".$_POST['username']."'")) { ... }

我试过了:

update=FROM_UNIXTIME(".$_.")
update=UNIX_TIMESTAMP(".strtotime($_).")
update=UNIX_TIMESTAMP('".strtotime($_)."')
update='".UNIX_TIMESTAMP(strtotime($_))."'
update='".UNIX_TIMESTAMP($_)."'
update='".$_."'

非常感谢任何帮助! 谢谢, 戴夫

3 个答案:

答案 0 :(得分:1)

如果您要使用update作为列名,则应使用反引号将其转义,因为它是reserved word$_的值对于字段本身来说很好。

mysql_query(" ... SET likes = 1, `update` = '$_' ...")

另一件事;你应该转义$_POST['username']的值以避免SQL注入:

" ... WHERE username='" . mysql_real_escape_string($_POST['username']) . "'");

您还可以使用格式字符串组合所有内容,例如:

$sql = sprintf("UPDATE Accounts SET likes='%d',`update`=%s' WHERE username='%s'", 
    1,
    $_,
    mysql_real_escape_string($_POST['username'])
);

$res = mysql_query($sql) or die("yikes: " . mysql_error());

此外:

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 1 :(得分:0)

mysql_query("UPDATE Accounts SET likes='1',update='".$_."' WHERE username='".$_POST['username']."'")

您有两个选项,即查询中的now()curdate()个功能。

now()返回日期,以及格式的时间戳; YYYY-MM-DD HH:MM:SS

curdate()以YYYY-MM-DD格式返回日期

您的查询将如下所示:

mysql_query("UPDATE Accounts SET likes='1', `update`='now()' WHERE username='".$_POST['username']."'")

注意后面的滴答声,这需要在更新时使用,因为它是一个保留字。您需要转义预订,以便将其用作列名。

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 2 :(得分:0)

update是MySQL语法中的关键字,您不应将字段命名为update。尝试将其命名为:updated_atupdated_date

如果您不能这样做,您必须在查询中引用字段名称:

"UPDATE Accounts 
SET likes='1',`update`='".$_."' 
WHERE username='".$_POST['username']."'"