Nu goed, STMT
Willen we nu meer dan één rij toevoegen dan komen we uit bij STMT of te wel prepared statements.
Hoe werkt dit?
We leggen eerst aan de MySQL server een query voor die dient als de basis. Hierin zijn de waardes vervangen door vraagtekens (?). De MySQL server geeft als de tabel en veldnamen bestaan groen licht voor de query en we kunnen razendsnel tientalle records toevoegen. Het zelfde kan met update en delete en zelfs met select.
Stap voor stap, uitleg in de code:
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
28
29
// Start een STMT
$stmt = mysqli_stmt_init($connectie);
// Laat de server het voorbeeld controleren
if (mysqli_stmt_prepare($stmt, "INSERT INTO tabel (veld1, veld2) VALUES (?,?)"))
{
// Het sjabloon is goedgekeurd
// Geef eerst de STMT gevolg door de types van de ? velden (s=string)
// Geef in dezelfde volgorde als de ? de variabelen waar de waarde in voor komen.
mysqli_stmt_bind_param($stmt, "ss", $veld1, $veld2);
// Geef de variabelen een waarde
$veld1 = 'iks';
$veld2 = 'dee';
mysqli_stmt_execute($stmt);
// Nu een kwestie van nieuwe waarde bepalen en opnieuw uitvoeren...
$veld1 = 'boris';
$veld2 = 'niek';
mysqli_stmt_execute($stmt);
// Als laatste sluiten we de STMT
mysqli_stmt_close($stmt);
}
else
{
echo "De query sjabloon bevat een fout.";
}
?>
In plaats van s (string) kan ook: i voor integer, d voor double, b voor blob
Een zelfde voorbeeldje in OOP:
2
3
4
5
6
7
8
9
10
11
$stmt = $mysqli->prepare("INSERT INTO tabel (veld1, veld2) VALUES (?, ?)");
$stmt->bind_param('ss', $veld1, $veld2);
$veld1 = 'iks';
$veld2 = 'dee';
$stmt->execute();
$veld1 = 'boris';
$veld2 = 'niek';
$stmt->execute();
$stmt->close();
?>
Opmerking Nee ik gebruik geen real_escape_string. Goed he, dat doet execute automatisch toepassen voor je.
Inhoudsopgave
- Inleiding
- Eisen aan de server
- Verbinden met MySQL server - nieuwe stijl
- Een simpele select
- Insert, update, delete -- old style
- Nu goed, STMT
- Verder....