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_timemin_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値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-02-09T07:25:08.463 に答える