我正在尝试在更新表单时向我的数据库添加时间戳,并且由于我不知道的原因,我收到错误...当我只是尝试插入年,月,日时“1988”插入我的数据库。我在同一网站的其他地方使用类似的时间戳,它工作正常。我做错了什么?
注意:是的我知道我应该使用mysqli而且我很容易受到sql注入攻击。我计划在今年晚些时候转换整个网站。
$homeScore = ((strlen($game['homeScore']) > 0) ? $game['homeScore'] : 'NULL');
$homeOdds = (str_replace("\xBD", ".5", $homeScore));
$visitorScore = ((strlen($game['visitorScore']) > 0) ? $game['visitorScore'] : 'NULL');
$visitorOdds = (str_replace("\xBD", ".5", $visitorScore));
$odds_timestamp = date("Y-m-d g:i:s A");
$sql = "update " . $db_prefix . "schedule ";
$sql .= " set odds_timestamp = " . $odds_timestamp . ", homeOdds = " . $homeOdds . ", visitorOdds = " . $visitorOdds . "";
$sql .= " where gameID = " . $game['gameID'];
mysql_query($sql) or die('Error updating odds: ' . mysql_error());
答案 0 :(得分:4)
您缺少(单个)引号" . $odds_timestamp . "
需要'" . $odds_timestamp . "'
,因为它将包含MySQL会抱怨的字符......是连字符。
现在,如果您的任何其他变量也是字符串,则它们也需要如图所示引用。
I.e。:'" . $string . "'
而不是" . $integer . "
有关字符串文字的更多内容:
注意里格斯的评论,其中一条是:
“最好建议将数据类型设置为DATETIME或TIMESTAMP,就像保留VARCHAR一样,它会使数据更难以在以后处理。只需更改date()以生成合法的MYSQL数据格式“
使用VARCHAR不会修复它,因为它仍被视为列的字符串文字。
Riggs的新评论:
“最好建议将数据类型设置为DATETIME或TIMESTAMP,就像保留VARCHAR一样,它会使数据更难以在以后处理。只需更改date()以生成合法的MYSQL数据当您向任何用户提供日期时间时,您总是可以添加AM / PM。后面的VARCHAR日期/时间也会严重影响您的选择标准。记住 - DATA for DATA,Browser for PRESENTATION“ < / p>
答案 1 :(得分:1)
您可以使用MySQL的NOW()函数,该函数返回当前日期时间。
答案 2 :(得分:0)
尝试使用on update set current timestamp子句在数据库表中添加timestamp列。
来自MySQL Documentation的简单示例:
CREATE TABLE t1 (
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
应该照顾它并切断中间人。双赢。
答案 3 :(得分:0)
没有错误信息,很难说些什么。 或者,如果您可以打印查询,这将有所帮助。
但请试试。
odds_timestamp = '" . $odds_timestamp . "'
使其成为显式字符串。