1

所以我在最愚蠢的情况下把头发拉出来......我试图为 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='".$_."'

任何帮助将不胜感激!谢谢,戴夫

4

3 回答 3

1

如果要update用作列名,则应使用反引号对其进行转义,因为它是保留字。的值$_适用于字段本身。

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_*在新代码中使用函数。它们不再被维护并被正式弃用。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程

于 2013-01-22T14:34:40.693 回答
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']."'")

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

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

于 2013-01-22T14:35:16.743 回答
0

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

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

"UPDATE Accounts 
SET likes='1',`update`='".$_."' 
WHERE username='".$_POST['username']."'"
于 2013-01-22T14:37:09.813 回答