PDO-API en prepared statements werkt bij mij niet
Pagina: « vorige 1 2 3 volgende »
Dus hoe moet het er dan uitzien in mijn script?
Als het werkt probeer dan te begrijpen hoe en waarom het werkt en probeer dan of je de verkorte methode van Wouter kunt implementeren.
Mijn uiteindelijke script ziet er zo uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
try {
$pdo = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, beveileging), '*****', '**********');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('SELECT * FROM gebruikers WHERE gebruikersnaam = :gebruikersnaam AND geslacht = :geslacht');
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute(array(
':gebruikersnaam' => $_GET['user'],
':geslacht' => $_GET['geslacht']
));
foreach ($stmt as $row) {
echo $row['gebruikersnaam'];
}
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
try {
$pdo = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, beveileging), '*****', '**********');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('SELECT * FROM gebruikers WHERE gebruikersnaam = :gebruikersnaam AND geslacht = :geslacht');
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute(array(
':gebruikersnaam' => $_GET['user'],
':geslacht' => $_GET['geslacht']
));
foreach ($stmt as $row) {
echo $row['gebruikersnaam'];
}
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
Goed gedaan Patrick!
snippet hoe ik mijn querys maak via mijn class
Dit dacht ik zo te doen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
//db updaten
$db = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, beveileging), '*****', '**********');
$naam = $db->quote($_GET['naam']);
$sql = "UPDATE gebruikers SET gebruikersnaam = 'admin' WHERE gebruikersnaam = '".$naam."'";
?>
//db updaten
$db = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, beveileging), '*****', '**********');
$naam = $db->quote($_GET['naam']);
$sql = "UPDATE gebruikers SET gebruikersnaam = 'admin' WHERE gebruikersnaam = '".$naam."'";
?>
Alleen hij doet niks wat doe ik verkeerd?
Gewijzigd op 04/12/2012 21:13:50 door patrick vollenbroek
Krijg je een error, wat is je script, ect.
$db->exec($sql).
En zet er een try-catch omheen voor de exception handling.
Patrick, je moet wel je $sql uitvoeren met En zet er een try-catch omheen voor de exception handling.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
try {
$db = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, beveileging), '*****', '*********');
$naam = $db->quote($_GET['naam']);
$sql = "UPDATE gebruikers SET gebruikersnaam = 'admin' WHERE gebruikersnaam = '".$naam."'";
$db->exec($sql);
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
try {
$db = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, beveileging), '*****', '*********');
$naam = $db->quote($_GET['naam']);
$sql = "UPDATE gebruikers SET gebruikersnaam = 'admin' WHERE gebruikersnaam = '".$naam."'";
$db->exec($sql);
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
Alleen het werkt nog steeds niet, wat moet ik doen?
Gewijzigd op 05/12/2012 16:15:00 door patrick vollenbroek
een $ voor localhost en beveile(i?)ging
wat bedoel je?
Kijk eens in dat code vak.
Dingen die daar rood kleuren, zijn strings.
Dingen die groen kleuren, zijn operatoren (functies die geen ronde haakjes vereisen).
en dan de blauwe code ...
Als het onderlijnd is, is het een bekende functie (met referentie op php.net). Als er een $ voor staat, is het een variabele.
In het andere geval zijn het defines. Dingen die gedefinieerd geweest zijn.
localhost staat blauw en zou rood moeten zijn (als je letterlijk 'localhost' bedoelt); ofwel moet die waarde in een variabele $localhost steken en moet er dus een $ voor
Gewijzigd op 05/12/2012 16:42:45 door Kris Peeters
Ik neem aan dat op regel 3 localhost en beveileging geen constanten zijn, dus dan moet het zijn $localhost en $beveileging.
Patrick vollenbroek op 05/12/2012 16:49:48:
Dat zijn ze wel.
in dit script.
in dit script.
Dan moet je ze misschien quoten om duidelijk te maken dat het strings zijn. 'localhost', 'beveiliging'.
Enne hij doet het niet? Krijg je geen melding? Doe eens een `echo $sql` om te zien of de query klopt.
Het resultaat van PDO::exec() is het aantal rijen dat ge-update is. Dat kun je ook nog gebruiken.
Code (php)
Is het resultaat 0? En als je de $sql direct op de database uitvoert?
Aantal rijen ge-update: \n
En wat bedoel je met:
En als je de $sql direct op de database uitvoert?
Dus echo je $sql, sleur en pleur naar je tool en kijk wat er gebeurt.
Gewijzigd op 05/12/2012 17:39:33 door Ger van Steenderen
Met: "$sql rechtstreeks op de database uitvoeren" bedoel ik het volgende. Als je een `echo $sql` in je programma opneemt dan weet je precies wat het statement is.
Rechtstreeks op de database uitvoeren betekent dat je op de database inlogt met een ander programma. Voor Oracle zou dat bijvoorbeeld `sqlplus` kunnen zijn, voor MySQL `mysql` of `phpMyAdmin`. Heb je zo'n tool? Je kunt dan de $sql die je hebt geprint direct op de database uitvoeren. Mogelijk krijg je dan een duidelijker foutmelding.
Toevoeging op 05/12/2012 17:48:55:
Merk trouwens op dat "UPDATE gebruikers SET gebruikersnaam = 'admin' WHERE gebruikersnaam = '".$naam."'" maar 1 keer goed gaat voor een bepaalde $naam. De volgende keren komt $naam niet meer voor in de database en wordt er niets ge-update. (Dan is $naam 'admin' geworden.)
Nu wil ik een db aansluiten met een streepje.
Hoe moet ik dat doen?
Dus in deze richting:
Code (php)
1
2
3
2
3
<?php
$pdo = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, the-game), '***', '**********');
?>
$pdo = new PDO(sprintf('mysql:host=%s;dbname=%s', localhost, the-game), '***', '**********');
?>
Alvast bedankt.
Gewijzigd op 08/12/2012 08:30:13 door patrick vollenbroek
http://nl1.php.net/manual/en/book.pdo.php
Op je vraag, een db aansluiten met een streepje kan gewoon zo
Patrick, neem anders eens een kijkje hier: Op je vraag, een db aansluiten met een streepje kan gewoon zo