2009-12-09 15 views
41

32個のフィールドを持つ長い行をMySQLテーブルに挿入する必要があります。PHP MYSQL - 列名を使用せずに自動インクリメントフィールドを使用して挿入

私はこのような何かをしたいと思います:フィールドは、MySQLのテーブルのフィールドと同じ順序である場合

$sql="insert into tblname values (... 32 fields ...)"; 

は明らかにそれが正常に動作します。しかし、私のテーブルは、最初のフィールドであるので、自動増分IDを持っています。

私が望むのは、すべてのテーブル名を最初の(id)ものにすることです。

提案?

答えて

64

ただ、予想通りautoincrementフィールドがまだ動作しますが、あなたの最初の値としてNULLを使用します。

INSERT INTO tblname VALUES (NULL, ... 32 Fields ...) 
+0

は非常に良いことです。 次の代替ソリューションも見つかりました: $ resultx = mysql_query( "SHOW TABLE STATUS LIKE 'diretorio'"); $ auto_incr_val = mysql_result($ resultx、0、 'Auto_increment'); –

+12

@Paulo:あなたは、あなたがそれをすることによってあなたが何の問題を抱えているか分かりません。 NULLを使用する - MySQLが動作するように設計された方法です。 – gahooa

+1

NO_AUTO_VALUE_ON_ZEROモードを有効にしないかぎり、auto_incrementをトリガするには0を使用するのが一般的です。 NULL、0、およびDEFAULTは、これをトリガするためにすべて受け入れられた値です。詳細については、http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_no_auto_value_on_zeroを参照してください。 – kojow7

12

NULLを自動インクリメントフィールドに挿入します。

これはハックスクリプトでない限り、フィールド名を使用することをお勧めします。テーブルにフィールドを追加したり、順序を変更したりする場合は、に壊れてしまうという根拠があります。

代わりに、フィールド名を明示的に指定すると、将来的にはさらに改善されます。

-1

我々はINSERTクエリで列名を指定せずにしようとすると、私たちは、任意の列の値を省略しなければならない、

アドバイスを場合上記の情報は間違っています。ここで

-3

は、私は(私のためにそれを書いた友人の礼儀)を使用してきた偉大なショートカット

$fieldlist=$vallist=''; 
foreach ($_POST as $key => $value) { 
$fieldlist.=$key.','; 
$vallist.='\''.urlencode($value).'\','; } 
$fieldlist=substr($fieldlist, 0, -1); 
$vallist=substr($vallist, 0, -1); 
$sql='INSERT INTO customer_info ('.$fieldlist.') VALUES ('.$vallist.')'; 
+2

このコードはSQLインジェクションに対して脆弱です。もっと詳しくはこちらをご覧ください:http://stackoverflow.com/questions/11939226/sql-injections-and-adodb-library-general-php-website-security-with-examples/12123649 –

+0

@IliaRostovtsev - 私はあなたとSQLインジェクションを避けるためにPDOに切り替わったので、投稿コード –

+1

に該当するので、質問に答えることにメリットがあると思います。また、考えられる問題について言及する価値もあります。 (私は、ちょうどその場合にはダウンボトムをしなかった) –

関連する問題