可以';t计算mysql数据时间


can't figure out mysql datatime

所以我在最愚蠢的情况下都会全力以赴。。。我正试图为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='".$_."'

如有任何帮助,我们将不胜感激!谢谢Dave

如果要使用update作为列名,则应使用backticks对其进行转义,因为它是一个保留字。$_的值对于字段本身来说是合适的。

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());

还有:

请不要在新代码中使用mysql_*函数。它们不再被维护,并被正式弃用。是否看到红框?了解准备好的语句,并使用PDO或MySQLi-本文将帮助您决定哪一个。如果你选择PDO,这里有一个很好的教程。

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

如果你不能做到这一点,你必须在查询中引用字段名:

"UPDATE Accounts 
SET likes='1',`update`='".$_."' 
WHERE username='".$_POST['username']."'"
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']."'")

注意后面的记号,这需要在更新中使用,因为这是一个保留字。您需要转义保留,以便将其用作列名。

请不要在新代码中使用mysql_*函数。它们不再被维护,并被正式弃用。是否看到红框?了解准备好的语句,并使用PDO或MySQLi-本文将帮助您决定哪一个。如果你选择PDO,这里有一个很好的教程。