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?
Probeer eerst mijn "werkstuk" eens en zie of het werkt. Ik ben benieuwd of je foutmeldingen krijgt.
Als het werkt probeer dan te begrijpen hoe en waarom het werkt en probeer dan of je de verkorte methode van Wouter kunt implementeren.
Als het werkt probeer dan te begrijpen hoe en waarom het werkt en probeer dan of je de verkorte methode van Wouter kunt implementeren.
Dank je Wouter J en Ivo Breeden het werkt.
Mijn uiteindelijke script ziet er zo uit:
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!
Probeer mijn class ook te leren je kan er makkelijk mee werken als je doorheb hoe het werkt
snippet hoe ik mijn querys maak via mijn class
snippet hoe ik mijn querys maak via mijn class
Oke, maar nu wil ik een update kunnen doen.
Dit dacht ik zo te doen:
Alleen hij doet niks wat doe ik verkeerd?
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.
Patrick, je moet wel je $sql uitvoeren met $db->exec($sql).
En zet er een try-catch omheen voor de exception handling.
En zet er een try-catch omheen voor de exception handling.
Oké nu heb ik dit:
Alleen het werkt nog steeds niet, wat moet ik doen?
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?
Om het een beetje simpel uit te drukken ...
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
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?
Het resultaat is:
Aantal rijen ge-update: \n
En wat bedoel je met:
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?
Je query uittesten in een tool zoals PHPMyAdmin, Workbench e.v.a.
Dus echo je $sql, sleur en pleur naar je tool en kijk wat er gebeurt.
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
Dat is vreemd. De exec method moet altijd een getal teruggeven: 0 of meer. Kennelijk wordt de $db->exec($sql) helemaal niet uitgevoerd.
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.)
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.)
Beste mensen,
Nu wil ik een db aansluiten met een streepje.
Hoe moet ik dat doen?
Dus in deze richting:
Alvast bedankt.
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
Patrick, neem anders eens een kijkje hier: http://nl1.php.net/manual/en/book.pdo.php
Op je vraag, een db aansluiten met een streepje kan gewoon zo
Op je vraag, een db aansluiten met een streepje kan gewoon zo




