2011-07-17 12 views
1

mysqlデータベースに行を挿入しようとすると、この奇妙な問題が発生します。2より大きい数の配列を暗黙に埋め込むとPHP INSERTエラーが発生する

これは考えです。運動の範囲が列挙されており、量を追加してこの運動を(日、月、火、水、木、金、土)に加える日を確認し、それを日記に追加することができます。

これは私のコードです。

$addDiary = array(); 
$addTimestamp = array(); 
$addDiary[] = '('.$current_user->id.', '.$_POST['exid_'.$i].', '.$_POST['qty_'.$i].', '.$calories_mod.', '.implode('.', $addTimestamp).')';    
$queryAddDiary = mysql_query("INSERT INTO LHNZ_FT_DIARY (USER_ID, EXERCISE_ID, TIME, CALORIES, TIMESTAMPS) VALUES ".implode(',', $addDiary)); 

私はaddDiary配列とaddTimestamp配列をエコーし​​てくれて、うまく見えます。

$ addTimestamp:1311206400.1311292800.1311379200

$ addDiary:(2、1、1、678、1311206400.1311292800.1311379200)

私の$ addTimestamp配列が1または2の長さを持っている場合、クエリは美しく動作することしかし、長さが2より大きい場合は、このエラーが発生します。

SQL構文に誤りがあります。右の構文は1

今ラインで「)0.1311379200」 近く使用するため は、MySQLサーバのバージョンに対応していることを、マニュアルをご確認ください。このエラーは 'を使用すると表示されます。または$ addTimestampのための私のimplodeとして ':'。私が手紙、または '_'を使用すると、このエラーが発生します。 「フィールドリスト」

不明な列「1311206400_1311292800_1311379200」私は(私はその運動を3週を行うことを意味2以上の長さで$ addTimestampを使用することができますどのように任意のアイデア...これがエラーの場所です)。

おかげで、MySQLのクエリで

  • レイトン
+0

質問にはPOSTデータを直接使用することはお勧めできません.Kamiによれば、あなたはSQLインジェクションを利用できます。新しいコードでhttp://bit.ly/phpmsql mysql_ *関数を使用しないでください。それらはもはや維持されず、https://wiki.php.net/rfc/mysql_deprecationは公式に推奨されなくなりました。代わりにhttp://php.net/pdo PDOまたはhttp://php.net/mysqli MySQLiについて学んでください。 – Revent

答えて

1

文字列値は単一引用符で囲む必要があります。

の代わりに:

$addDiary[] = '('.$current_user->id.', '.$_POST['exid_'.$i].', '.$_POST['qty_'.$i].', '.$calories_mod.', '.implode('.', $addTimestamp).')'; 

の操作を行います。

$addDiary[] = '('.$current_user->id.', '.$_POST['exid_'.$i].', '.$_POST['qty_'.$i].', '.$calories_mod.", '".implode('.', $addTimestamp)."')"; 

私は強くあなたはまた、SQLクエリにそれを接着する前に、mysql_real_escape_string()を介してすべての値を渡すことを示唆しているが。

+0

解決済み。どうもありがとうございました :] – leight

関連する問題