2012-01-27 1 views
-3

私はデータベース構造を有しています。 col1、col4、col7の値はnullにできません。残りの部分は、ユーザーが入力した内容に基づいています。INSERT文が

INSERT INTO $table VALUES ($col1, '$col2 ' , '$col3 ', '$col4' , '$col5 ', '$col6 ', '$col7', '$col8 ', '$col9 '). 

しかしmysqlのはエラーを報告します。私は次のように私はINSERT文を準備

$表を定義し、他のすべての必要な変数います。私は正しいですか?

エラー:#1064 - SQL構文に誤りがあります。ライン1に近い使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを「)」をチェック

私のテーブル構造:

Field Type  Null Key  Default  Extra 

colNo1 int(10)  NO  PRIMARY  NULL  
collNo2 varchar(10) YES   NULL  
colNo3 varchar(10) YES   NULL  
colNo4 varchar(10) NO   NULL  
colNo5 varchar(10) YES   NULL  
colNo6 varchar(10) YES   NULL  
colNo7 varchar(10) NO   NULL  
colNo8 varchar(10) YES   NULL  
colNo9 varchar(10) YES   NULL  
+0

"done in php"? PHPにはデータベースがありません。 –

+1

_What_エラー...? –

+2

挿入する必要がない場合でも、挿入する列名を指定することをお勧めします。あなたが使用するアプローチは、あなたのテーブル構造が変わった場合にバグを引き起こす可能性があります。 – JohnFx

答えて

0

あなたはあなたのクエリは次のようになりますそのコメントで示されている:

INSERT INTO table1 VALUES (54, , , 'news', '', '', 'bean', '', '', 'palm', '', '') 

すべてのPHPは、上記のテストケースについてです質問に完全に無関係です。

これらの空のパラメータは不正です。あなたはヌルフィールドをしたい場合は...

INSERT INTO table1 VALUES (54, NULL, NULL, 'news', '', '', 'bean', '', '', 'palm', '', '') 

NULLを書いてください...またはあなたが移入したくないフィールドを省略した引数リストを提供します。

0

があなたのSQLコードのタイプミスのように見えます。

$ col7

+0

はい....タイプミス、申し訳ありません – user980411

+0

@ user980411:問題のアップデートも –

+0

@FahimParkar:ずっと前に更新されました! – user980411

3

スキーマチャンスに惑わされないように、常に列名を指定します。常に常にが変数をエスケープします。あなたは、あなたの質問に任意のプレーンテキストを置く必要はありません。 PHPを使用している場合は、PDOを使用してエスケープ処理を行い、クエリを読みやすくします。

それはもっとこのように見える終わる:

INSERT INTO `$table` (col1, col2, col3, col4, ...) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) 

PDOのプレースホルダは、NULLに引用符で囲まれた文字列、数値、または任意の適切あなたが持つかもしれない任意の値を挿入するために必要とされる変換されます。