Vaker insert tegelijk?
shonda - 29/02/2008 01:25 (laatste wijziging 04/03/2008 00:59)
Lid
Ik wil vaker een insert in de db zetten met maar 1 query.
Helaas werkt dat niet
$sql = "INSERT INTO personen(naam, leeftijd, woonplaats) VALUES ('".$naam."', '".$leeftijd."', '".$woonplaats."')";
$sql = "INSERT INTO personen(naam, leeftijd, woonplaats) VALUES ('" . $naam . "', '" . $leeftijd . "', '" . $woonplaats . "')" ;
Nu wil ik meerdere personen tegelijk erin plaatsen.
Dus dat ik krijg in de db:
Citaat:
id | naam | leeftijd | woonplaats
1 | Piet | 30 | Amsterdam
2 | Klaas | 42 | Utrecht
3 | Henk | 42 | Berlin
Door maar 1 keer een insert query uit te voeren
Helaas is dit mijn resultaat:
Citaat:
id | naam | leeftijd | woonplaats
1 | Piet | 30 | Amsterdam
Hoe zorg ik er nou voor dat ik meerdere inserts tegelijk kan doen?
12 antwoorden
Gesponsorde links
Abbas - 29/02/2008 01:58
Crew .NET
$myArray[1] = array("naam" => "piet", "leeftijd" => 30, "woonplaats" => "hier");
$myArray[2] = array("naam" => "jan", "leeftijd" => 20, "woonplaats" => "daar");
for($i = 1; $i < 3; $i++)
{
mysql_query("INSERT INTO leden(naam, leeftijd, plaats) VALUES('".$myArray[$i]["naam"]."', '".$myArray[$i]["leeftijd"]."', '".$myArray[$i]["woonplaats"]."')") or die(mysql_error());
}
$myArray [ 1 ] = array ( "naam" => "piet" , "leeftijd" => 30 , "woonplaats" => "hier" ) ; $myArray [ 2 ] = array ( "naam" => "jan" , "leeftijd" => 20 , "woonplaats" => "daar" ) ;
for ( $i = 1 ; $i < 3 ; $i ++ )
{
mysql_query ( "INSERT INTO leden(naam, leeftijd, plaats) VALUES('" . $myArray [ $i ] [ "naam" ] . "', '" . $myArray [ $i ] [ "leeftijd" ] . "', '" . $myArray [ $i ] [ "woonplaats" ] . "')" ) or
die ( mysql_error ( ) ) ; }
shonda - 29/02/2008 02:57
Lid
bedankt, maar hoe gebruik ik dit als ik zelf niet weet hoeveel personen in de database moeten worden geplaatst?
ranco - 29/02/2008 09:31
PHP gevorderde
Dan laat je door de gebruiker het aantal personen invullen in je form, hetzelfde form waar je al deze gegevens in laat voeren (aanname).
Of tel het aantal ingevulde velden van het form, en dan weet je je aantal.
Rens - 29/02/2008 11:51
Crew algemeen
Je kunt het ook in 1 query doen.
Dan geef je gewoon meerdere values aan:
INSERT INTO <tbl> (naam, adres, woonplaats) VALUES ($gegevens[0][naam], $gegevens[0][adres], $gegevens[0][woonplaats]), ($gegevens[1][naam], $gegevens[1][adres], $gegevens[1][woonplaats]), ($gegevens[2][naam], $gegevens[2][adres], $gegevens[2][woonplaats]);
INSERT INTO < tbl> ( naam, adres, woonplaats) VALUES ( $gegevens[ 0 ] [ naam] , $gegevens[ 0 ] [ adres] , $gegevens[ 0 ] [ woonplaats] ) , ( $gegevens[ 1 ] [ naam] , $gegevens[ 1 ] [ adres] , $gegevens[ 1 ] [ woonplaats] ) , ( $gegevens[ 2 ] [ naam] , $gegevens[ 2 ] [ adres] , $gegevens[ 2 ] [ woonplaats] ) ;
Zo kun je je values opbouwen door er met een for loop doorheen te lopen.
<?PHP
$sQuery = "INSERT INTO <tbl> (naam, adres, woonplaats) VALUES ('".$gegevens[0]['naam']."', '".$gegevens[0]['adres']."', '".$gegevens[0]['woonplaats']."')";
$iCount = count($gegevens);
for($i = 1; $i < $iCount; $i++)
{
$sQuery = ", ('".$gegevens[$i]['naam']."', '".$gegevens[$i]['adres']."', '".$gegevens[$i]['woonplaats']."')";
}
mysql_query($sQuery);
<?PHP
$sQuery = "INSERT INTO <tbl> (naam, adres, woonplaats) VALUES ('" . $gegevens [ 0 ] [ 'naam' ] . "', '" . $gegevens [ 0 ] [ 'adres' ] . "', '" . $gegevens [ 0 ] [ 'woonplaats' ] . "')" ;
$iCount = count ( $gegevens ) ; for ( $i = 1 ; $i < $iCount ; $i ++ )
{
$sQuery = ", ('" . $gegevens [ $i ] [ 'naam' ] . "', '" . $gegevens [ $i ] [ 'adres' ] . "', '" . $gegevens [ $i ] [ 'woonplaats' ] . "')" ;
}
Snap je wat ik bedoel?
shonda - 29/02/2008 14:23 (laatste wijziging 01/03/2008 03:10)
Lid
Snap het wel, maar het mag geen form bevatten.
Er komt geen gebruiker aan het script het gaat via cronjobs.
Ik haal uit de database de gegevens die nodig zijn,
Waarna ik ze weer in een ander tabel plaats.
yetti4 - 01/03/2008 12:17
JS interesse
dat kan je input type="hidden" maken met value van wat je uit de database heeft gehaald en daarna post je het gewoon mee ;)
shonda - 01/03/2008 16:35
Lid
Rens schreef:
Je kunt het ook in 1 query doen.
Dan geef je gewoon meerdere values aan:
[..code..]
Zo kun je je values opbouwen door er met een for loop doorheen te lopen.
[..code..]
Snap je wat ik bedoel?Â
Moet ik nou de bovenste of de onderste gebruiken?
En hoe gebruik ik het?
Kom er niet helemaal uit.
Wat ik eruit kan halen is dat ik zelf moet aangeven hoeveel inserts er worden gedaan?
En als ik de ene keer 5 wil en de andere keer maar 2? Zonder steeds de code aan te moeten passen?
Martijn - 01/03/2008 16:41 (laatste wijziging 01/03/2008 16:43)
Crew PHP
je hebt nu iets voor <input typ=text name=1> tot name=4
$max=5; // uitgaand van 4 invulvakjes
$i=1;
while($i<$max){
if(isset($_POST['$i'])){
insert_query;
$i++;
}
}
$max = 5 ; // uitgaand van 4 invulvakjes
$i = 1 ;
while ( $i < $max ) {
insert_query;
$i ++;
}
}
weet niet zeker of $_POST['$i'] is toegestaan, maar t is een snel voorbeeldje. En ik zou ff een sql-injection beveiliging maken.
shonda - 02/03/2008 22:01 (laatste wijziging 03/03/2008 01:24)
Lid
Dus een hidden form waarmee ik het uit de db haal?
En dan daaronder bovenaand scriptje plaatsen,
max aantal queries geven?
Kan ik het ook zonder max?
En wat werkt het snelst?
Verder, hoe bouw ik er een mailfunctie op aan?
Hoe ik mailfunctie moet gebruiken weet ik, maar zodat de mail wordt verstuurd naar alle geregistreerde gebruikers die uit de db zijn gehaald?
Het gaat er dus niet om alle leden in de tabel, maar enkel de uitgehaalde leden.
TriX - 03/03/2008 10:30
HTML interesse
De email adressen die je ophaalt zet je in een Array...
Die Array loop je door in je mailfunctie d.m.v. een For loop...
shonda - 04/03/2008 01:00
Lid
Ik ga dat proberen.
Iemand een idee over het volgende?
Dus een hidden form waarmee ik het uit de db haal?
En dan daaronder bovenaand scriptje plaatsen,
max aantal queries geven?
Kan ik het ook zonder max?
En wat werkt het snelst?
Gesponsorde links
Dit onderwerp is gesloten .