2012-09-19 22 views
35

Voglio scrivere script, con funzione di query di inserimento multiple. lasciami spiegare meglio.Inserire più righe con una query MySQL

Ho un input quantity in formato html. e ho una query MySQL per inserire registered user nella tabella. quindi voglio che la mia funzione inserisca questa query per i tempi di "quantità".

mysql_query("INSERT INTO `pxlot` (realname,email,address,phone,status,regtime,ip) 
VALUES ('$realname','$email','$address','$phone','0','$dateTime','$ip')") 
or die (mysql_error()); // Inserts the user. 

Per inserire questo ad esempio 3 volte. Qualche suggerimento?

+5

Se stai ripetendo una serie di valori identici più volte all'interno di una determinata tabella, si sta facendo male. Devi tornare indietro e rivalutare la progettazione dello schema. –

+2

a proposito mysql_ * è deprecato –

risposta

77
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 

http://dev.mysql.com/doc/refman/5.5/en/insert.html

+5

qual è il limite degli elenchi di valori di colonna nell'istruzione? Voglio dire quante tuple '(1,2)' possiamo passare ad una singola istruzione 'INSERT'. – PythonDev

+6

@akshay, non so davvero la risposta, sospetto che la limitazione non risieda nel numero di tuple, ma piuttosto nella dimensione dell'istruzione che è controllata dalla variabile di sistema mysql 'max_allowed_packet'. Penso che il valore predefinito sia 1MB con protocollo massimo 1GB. –

18

Ecco alcuni modi per farlo

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
from SOMETABLEWITHTONSOFROWS LIMIT 3; 

o

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip' 

o

INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip) 
values ('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
,('$realname','$email','$address','$phone','0','$dateTime','$ip') 
13

Nella maggior parte dei casi l'inserimento di più record con un'istruzione Insert è molto più veloce in MySQL rispetto all'inserimento di record con ciclo for/foreach in PHP.

Supponiamo che $ column1 e $ column2 siano matrici con le stesse dimensioni pubblicate dal modulo html.

È possibile creare la query come questa:

<?php 
    $query = 'INSERT INTO TABLE (`column1`, `column2`) VALUES '; 
    $query_parts = array(); 
    for($x=0; $x<count($column1); $x++){ 
     $query_parts[] = "('" . $column1[$x] . "', '" . $column2[$x] . "')"; 
    } 
    echo $query .= implode(',', $query_parts); 
?> 

Se i dati vengono inviati per due record la query diventerà:

INSERT INTO TABLE (column1, column2) VALORI ('dati' , "dati"), ("dati", "dati")

0

Se si desidera inserire più valori, si può dire da più ingressi che hanno di valori pubblicare fferent ma allo stesso tavolo per inserire in poi semplicemente utilizzare:

mysql_query("INSERT INTO `table` (a,b,c,d,e,f,g) VALUES 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g'), 
('$a','$b','$c','$d','$e','$f','$g')") 
or die (mysql_error()); // Inserts 3 times in 3 different rows 
Problemi correlati