10 rijen toevoegen aan database
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
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 ;-)
INSERT INTO table (column) VALUES ($array[0]) ($array[1]) ($array[2]) ......
Quote:
Zie de handleiding.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);
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
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.
Dan nog even een kort vraagje. Is er een functie die " omzet in %22? (dus niet htmlentities(), want die maakt er " van)
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.
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
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
urlencode(). Maar ik snap niet waarom je die zou willen gebruiken bij het invoeren inde database.
Dan ben je waarschijnlijk op zoek naar de functie Thanks anyway.
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)
1
2
3
4
5
6
7
8
9
10
11
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);
?>
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
Dit voorbeeld zit beter in elkaar:
Code (php)
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
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!
?>
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.
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. :)