$insert = mysql_query("
INSERT into analytics.pagesummary (Date, avg_load_time, min_load_time, max_load_time)
VALUES ($date,$string_avg, $string_min,$string_max)" )
or die('PROBLEM'.mysql_error());
实际日期值= '2013-02-07', '2013-02-08', '2013-02-09'
触发查询后数据库中的日期值= '2004', '2003', '2002'
显示avg_load_time
,min_load_time
&的其他值max_load_time
是正确的。
我们哪里出错了。任何帮助将不胜感激。
答案 0 :(得分:1)
因为值没有包装在单个引号中而且mysql默默地隐式地转换值,它应该是
INSERT INTO analytics.pagesummary (Date, avg_load_time, min_load_time, max_load_time)
VALUES ('$date', '$string_avg', '$string_min', '$string_max')
插入时2013-02-07
成为2004
的原因是因为它执行算术运算,以便
2013 - 02 = 2011 - 07 = 2004
2013 - 02 = 2011 - 08 = 2003
2013 - 02 = 2011 - 09 = 2002
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。