10 rijen toevoegen aan database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Newbie

PHP Newbie

19/12/2006 15:14:00
Quote Anchor link
Heey allemaal,

Ik wil de complete inhoud van een array in de database zetten. Kan ik hier het best gewoon een foreach voor gebruiken, of zijn hier nog andere oplossingen voor.

Groet
Newb
 
PHP hulp

PHP hulp

19/11/2024 09:34:19
 
Joren de Wit

Joren de Wit

19/12/2006 15:23:00
Quote Anchor link
Gewoon met een foreach inderdaad. Je zult toch op een of andere manier door die array heen moeten lopen en voor elke nieuwe waarde een nieuwe insertquery uit moeten voeren ;-)
 
Kalle P

Kalle P

19/12/2006 15:34:00
Quote Anchor link
INSERT INTO table (column) VALUES ($array[0]) ($array[1]) ($array[2]) ......
 
Frank -

Frank -

19/12/2006 15:37:00
Quote Anchor link
Dit zou ook moeten werken:
Quote:
INSERT statements that use VALUES syntax can insert multiple rows. To do this, include multiple lists of column values, each enclosed within parentheses and separated by commas. Example:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Zie de handleiding.

Bedenk ook op welke manier je de foutafhandeling gaat aanpakken. Wat moet er gebeuren als er ergens iets fout gaat? Moet de rest van de array wel in de database worden gezet of moet alles ongedaan worden gemaakt? Wellicht wil je een TRANSACTION gebruiken, dan heb je innoDB nodig. (is toch al de beste MySQL-engine!)

Ik heb deze methode nooit toegepast en heb dus geen idee wat er gebeurd als er ergens iets fout gaat. Ik verwacht dat de hele query mislukt, maar met MySQL weet je het maar nooit... Test dit even heel goed om zekerheid te krijgen.
 
PHP Newbie

PHP Newbie

19/12/2006 15:52:00
Quote Anchor link
Ik denk dat Ik gewoon een foreach ga gebruiken. Dat is het gemakkelijkst.

Dan nog even een kort vraagje. Is er een functie die " omzet in %22? (dus niet htmlentities(), want die maakt er " van)
 
Frank -

Frank -

19/12/2006 16:03:00
Quote Anchor link
htmlentities() en consorten gebruik je bij het aanmaken van html-output. Nooit bij een INSERT. Kijk eens naar htmlspecialchars()

Nogmaals de vraag 'wat te doen bij een fout', wat ga je doen met de reeds uitgevoerde INSERT-queries (binnen de foreach), wanneer een query mislukt? Weet je 110% zeker dat de data-integriteit van de database niet in het geding is? Alle systemen die ik ken (en dat zijn er nogal wat) maken alle INSERT-queries ongedaan die je op dat moment aan het uitvoeren was. Het heeft geen zin om bv. een user aan te maken en maar de helft van zijn hobbies in de database weg te schrijven. Een halve aanmelding heb je weinig aan.
 
PHP Newbie

PHP Newbie

19/12/2006 16:08:00
Quote Anchor link
Ik heb die functie niet nodig om data naar de database te schrijven frank.

Bij een fout laat ik de foreach gewoon doorgaan.

Er komt dan uiteindelijk te staan:

link 1: gelukt
link 2: gelukt
link 3: Mislukt
..
..

Edit:

htmlspcialchars() doet vrijwel hetzelfde als htmlentities(). " [dubbele quote] wordt " maar ik wil dat het wordt %22
Gewijzigd op 01/01/1970 01:00:00 door PHP Newbie
 
Joren de Wit

Joren de Wit

20/12/2006 11:37:00
Quote Anchor link
Dan ben je waarschijnlijk op zoek naar de functie urlencode(). Maar ik snap niet waarom je die zou willen gebruiken bij het invoeren inde database.
 
PHP Newbie

PHP Newbie

20/12/2006 14:39:00
Quote Anchor link
gaat niet over het in de database zetten Blanche, was gewoon een andere vraag. Dat had ik wel nodig voor dit systeem, maar had niks met de database te maken ;-)

Thanks anyway.
 
Wim

Wim

20/12/2006 15:26:00
Quote Anchor link
Quote:
Bedenk ook op welke manier je de foutafhandeling gaat aanpakken. Wat moet er gebeuren als er ergens iets fout gaat? Moet de rest van de array wel in de database worden gezet of moet alles ongedaan worden gemaakt? Wellicht wil je een TRANSACTION gebruiken, dan heb je innoDB nodig. (is toch al de beste MySQL-engine!)


@Frank
Dit vond ik wel even interessant.
Hoe pas je dit toe?
Zoiets? (ongetest):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
require "connect.php";
$trans=mysql_query ($query1="START TRANSACTION") or die ('Error: ' . mysql_error());
$insert=mysql_query ($query2="INSERT INTO table SET data1='$_POST[data1]', data2='$_POST[data2]'");
if (mysql_error()) {
$rollback=mysql_query ($query3="ROLLBACK") or die ('Error: ' . mysql_error());
die ('Error: ' . mysql_error());
}

$commit=mysql_query ($query4="COMMIT") or die ('Error: ' . mysql_error());
mysql_close($link);
?>
Gewijzigd op 01/01/1970 01:00:00 door Wim
 
Frank -

Frank -

20/12/2006 16:19:00
Quote Anchor link
@Wim: Het zal volgens mij wel werken, maar is niet netjes gescript. Verder heb je in jouw voorbeeld helemaal niets aan een TRANSACTION, je voert tenslotte maar 1 INSERT-query uit. Wanneer deze mislukt, dan is er niets in de database weggeschreven en valt er dus ook niets te ROLLBACK-en.

Dit voorbeeld zit beter in elkaar:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
require "connect.php";

$query = "START TRANSACTION";
$result = mysql_query($query) or die('Error: '.mysql_error()); // die() is vies!

$aInput = array('aap', 'noot', 'mies');

$iError = 0;
foreach ($aInput as $value) {
    $query = "INSERT INTO tabelnaam (kolomnaam) VALUES('".$value."')";
    
    $result = mysql_query($query);
    if (!$result) { // query is mislukt
        $iError++;
    }
}


if ($iError == 0) { // geen fouten opgetreden
    $query = "COMMIT";
}

else { // ergens is er iets fout gegaan.
    $query = "ROLLBACK";
}

// COMMIT of ROLLBACK uitvoeren:
$result = mysql_query($query) or die(mysql_error()); // die() is vies!
?>

Hier worden 3 queries uitgevoerd, wanneer er 1 of meerdere mislukken, worden ze allemaal ongedaan gemaakt.
 
Wim

Wim

20/12/2006 16:27:00
Quote Anchor link
@Frank
Bedankt voor de uitleg en voorbeeld. Mijn voorbeeldje was idd niet netjes, had het alleen ff snel ingetikt om een beeld te vormen hoe het te gebruiken, en of dat de juiste manier was.

Ik heb weer wat geleerd. :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.