2009-12-09 13 views
41

Potrzebuję wstawić długi wiersz z 32 pól do tabeli MySQL.PHP MYSQL - Wstaw bez nazw kolumn, ale z polem autorekrementacji

chciałbym zrobić coś takiego:

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

Oczywiście to działa w porządku, jeśli pola są w takiej samej kolejności jak na polach tabeli MySQL. Ale moja tabela ma identyfikator automatycznego inkrementacji jako pierwsze pole.

Chcę tylko wypełnić wszystkie nazwy tabel, ale pierwszy (identyfikator).

Sugestie?

Odpowiedz

64

Wystarczy użyć NULL jako pierwsza wartość, pole autoincrement będzie nadal działać zgodnie z oczekiwaniami:

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

Bardzo dobre. Znalazłem także alternatywne rozwiązanie: $ resultx = mysql_query ("POKAŻ STATUS TABELI" diretorio "); $ auto_incr_val = mysql_result ($ resultx, 0, 'Auto_increment'); –

+12

@Paulo: nie masz pojęcia, jakie kłopoty możesz otworzyć, robiąc to. Użyj NULL - tak zaprojektował go MySQL. – gahooa

+1

Zwykle używanie 0 do wyzwalania auto_increment jest w porządku, chyba że włączysz tryb NO_AUTO_VALUE_ON_ZERO. NULL, 0 i DEFAULT to wszystkie akceptowane wartości, które to wyzwalają. Więcej informacji można znaleźć na stronie http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_no_auto_value_on_zero. – kojow7

12

Wstaw NULL do pola automatycznego zwiększania wartości.

Polecam, chyba że jest to skrypt hackowy, używasz nazw pól. Uzasadnieniem jest, że Twój kod będzie przerwać, jeśli kiedykolwiek dodasz pole do tabeli lub zmienisz ich kolejność.

Zamiast tego należy wyraźnie podawać nazwy pól, aw przyszłości będzie znacznie lepiej.

-1

powinniśmy pomijać żadnych wartości kolumn, gdy staramy bez nazwy kolumny w zapytaniu INSERT,

Ostrzegaj, jeśli powyższe informacje są błędne.

-3

Oto wielki skrót że użyłem (dzięki uprzejmości znajomego, który napisał dla mnie)

$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

Ten kod jest podatny na SQL Injection. Przeczytaj więcej tutaj: http://stackoverflow.com/questions/11939226/sql-injections-and-adodb-library-general-php-website-security-with-examples/12123649 –

+0

@IliaRostovtsev - Podczas gdy zgadzam się z tobą i przełączyłem się na PDO, aby uniknąć iniekcji SQL, wydaje mi się, że odpowiedź na to pytanie jest korzystna, ponieważ odnosi się do opublikowanego kodu. –

+1

Tak, prawdopodobnie. Warto również wspomnieć o możliwych problemach. (Nie spadłem, tak na wszelki wypadek) –

Powiązane problemy