0
$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是正确的。

我们哪里错了。任何帮助,将不胜感激。

4

1 回答 1

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

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-02-09T07:25:08.463 回答