2009-12-09 29 views
41

Tôi cần chèn hàng dài với 32 trường vào bảng MySQL.PHP MYSQL - Chèn vào mà không sử dụng tên cột nhưng với trường tự động

Tôi muốn làm điều gì đó như thế này:

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

Rõ ràng nó hoạt động tốt nếu các lĩnh vực đang trong thứ tự như các lĩnh vực bảng MySQL. Tuy nhiên, bảng của tôi có id tự động tăng là trường đầu tiên.

Điều tôi muốn là điền vào tất cả các tên bảng nhưng là tên đầu tiên (id).

Đề xuất?

Trả lời

64

Chỉ cần sử dụng NULL như giá trị đầu tiên của bạn, lĩnh vực autoincrement sẽ vẫn làm việc như mong đợi:

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

Rất tốt. Tôi cũng đã tìm thấy giải pháp thay thế như sau: $ resultx = mysql_query ("SHOW TABLE STATUS LIKE 'diretorio'"); $ auto_incr_val = mysql_result ($ resultx, 0, 'Auto_increment'); –

+12

@Paulo: bạn không biết mình gặp khó khăn gì khi làm điều đó. Sử dụng NULL - đó là cách MySQL thiết kế nó để làm việc. – gahooa

+1

Thông thường, sử dụng 0 để kích hoạt auto_increment trừ khi bạn bật chế độ NO_AUTO_VALUE_ON_ZERO. NULL, 0 và DEFAULT là tất cả các giá trị được chấp nhận để kích hoạt tính năng này. Xem http://dev.mysql.com/doc/refman/5.6/en/sql-mode.html#sqlmode_no_auto_value_on_zero để biết thêm thông tin. – kojow7

12

Chèn NULL vào trường tự động tăng.

Tôi khuyên rằng trừ khi đây là tập lệnh hack, bạn sử dụng tên trường. Lý do là mã của bạn sẽ ngắt nếu bạn thêm trường vào bảng hoặc thay đổi thứ tự của chúng.

Thay vào đó, hãy rõ ràng với tên trường và sẽ tốt hơn trong tương lai.

-1

Chúng ta nên bỏ qua bất kỳ giá trị cột khi chúng tôi cố gắng không tên cột trong truy vấn chèn,

Tư vấn nếu thông tin trên là sai.

-3

Dưới đây là một phím tắt tuyệt vời mà tôi đã sử dụng (lịch sự của một người bạn đã viết nó cho tôi)

$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

Mã này dễ bị tấn công với SQL Injection. Đọc thêm tại đây, vui lòng: http://stackoverflow.com/questions/11939226/sql-injections-and-adodb-library-general-php-website-security-with-examples/12123649 –

+0

@IliaRostovtsev - Trong khi tôi đồng ý với bạn và đã chuyển sang PDO để tránh việc tiêm SQL, tôi cảm thấy có lợi khi trả lời câu hỏi vì nó liên quan đến mã được đăng –

+1

Có, có thể. Nó cũng đáng nói đến aboug những vấn đề có thể xảy ra. (Tôi không downvote, chỉ trong trường hợp) –

Các vấn đề liên quan