Điều này có hợp pháp không?Nhiều câu lệnh INSERT mysql trong một truy vấn php
$string1= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
mysql_query($string1) or die(mysql_error());
Điều này có hợp pháp không?Nhiều câu lệnh INSERT mysql trong một truy vấn php
$string1= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
$string1 .= "INSERT INTO....;";
mysql_query($string1) or die(mysql_error());
Đối với những gì nó có giá trị, và tùy thuộc vào nếu bạn chèn cùng một dữ liệu vào các bảng cùng, it's much better to insert multiple values with the one insert ví dụ
INSERT INTO a VALUES (1,23),(2,34),(4,33);
INSERT INTO a VALUES (8,26),(6,29);
Cảm ơn đặc biệt vì đã tham khảo trang "Tốc độ chèn". – SarathChandra
Không. Đó là các truy vấn riêng biệt và phải được gọi như vậy.
Không, mysql_query()
chỉ cho phép một truy vấn tại một thời điểm.
Bạn có thể chèn nhiều hàng như thế này:
INSERT INTO table (col1, col2)
VALUES (1, 2), (3, 4), (5, 6)
Cái này tốt hơn - điều quan trọng là chỉ định tên trường mà bạn đang đổ dữ liệu vào ! – itsricky
Nói chung, đó là SQL hợp lệ vì mỗi câu lệnh kết thúc bằng dấu chấm phẩy, nhưng PHP không cho phép bạn gửi nhiều truy vấn cùng một lúc, để bảo vệ chống lại các cuộc tấn công SQL injection có thể khai thác kịch bản viết kém.
Bạn vẫn có thể sử dụng cú pháp như sau:
INSERT INTO foo VALUES ('a1', 'b1'), ('a2', 'b2');
Từ hỗ trợ dev MySQL MySQL dev forum
INSERT INTO table (artist, album, track, length)
VALUES
("$artist", "$album", "$track1", "$length1"),
("$artist", "$album", "$track2", "$length2"),
("$artist", "$album", "$track3", "$length3"),
("$artist", "$album", "$track4", "$length4"),
("$artist", "$album", "$track5", "$length5");
Vì vậy, chèn diễn ra như bình thường như mọi khi:
Chúc mừng chèn nhiều giá trị với câu lệnh ONE chèn. :)
Sao chép/dán ví dụ trong một hàm và một vòng lặp (giả sử $ id là một mảng)
public function duplicateItem($ids)
{
if (isset($ids[0])){ //at least one item
$sqlQuery = "INSERT INTO items (item_id, content) VALUES ";
for($i=0; $i<count($ids); $i++) {
if ($i == count($ids)-1){
$sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."');";
}else{
$sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."'),";
}
}
mysql_query($sqlQuery) or die('Error, insert query failed: '.mysql_error());
}
}
Tốt hơn là tránh ghép nối. Sử dụng 'implode()'. xem [answer] (http://stackoverflow.com/a/780046/4040525) để biết chi tiết. –
Tại sao sử dụng implode() có lợi trong trường hợp này? Trong câu hỏi trên, chúng ta có các câu lệnh SQL bình thường. Trong câu trả lời bạn chỉ ra rằng họ nói về số lượng lớn văn bản (chẳng hạn như 1000 đoạn văn bản lớn) và, vâng, trong trường hợp đó là tốt để tránh ghép nối. –
Tôi biết.OK của nó để sử dụng nối ở đây. Hôm qua tôi nhận thấy cả hai câu trả lời và nghĩ tốt hơn nên sử dụng 'implode()' như một quy tắc của ngón tay cái. –
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);
Tôi đã giải quyết vấn đề của tôi chạy nhiều truy vấn về dự án php của tôi sử dụng phương pháp mysqli này [mysqli .multi-query.] (http://us2.php.net/manual/en/mysqli.multi-query.php) –