PDO of ouderwets?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ray B

Ray B

17/10/2007 10:27:00
Quote Anchor link
Hallo, ik ben zelf bezig met een database te maken.
En in mijn boek staat dat er 3 verschillende mannieren zijn om een database aan te spreken in php 5.0

Het gaat hier om
MySQL, MySQLI & PDO.

Alleen zijn ze er vergeten bij te zetten waarom je voor welke zou kiezen en welke er nou eigenlijk de beste optie is en waarom.

Wat kan ik het beste nemen?
 
PHP hulp

PHP hulp

25/04/2024 16:34:22
 
Hipska BE

Hipska BE

17/10/2007 10:32:00
Quote Anchor link
MYSQL mag je alvast vergeten, daar MYSQLi de opvolger is.

PDO neem je wanneer je scripts met verschillende DB's moet werken of werkbaar zijn (lees: pgSQL, acess, mySQL, ...)

MYSQLi neem je wanneer je enkel en alleen met MySQL moet gaan werken.
 
Frank -

Frank -

17/10/2007 10:33:00
Quote Anchor link
Bij 'een database' zijn er nog wel wat meer keuzes, MySQL is slechts 1 van de vele databases die beschikbaar zijn. En het is zeker niet de beste...

Ik gebruik zelf met veel plezier PDO, het doet alles wat ik nodig heb en werkt uitstekend met PostgreSQL en MySQL.
 
Jelmer -

Jelmer -

17/10/2007 10:39:00
Quote Anchor link
MySQL is de oude manier, maar nog wel meest gebruikte weliswaar. Deze heeft geen features zoals prepared statements en kent alleen functies, geen klassen. Je moet zelf om je veiligheid zorgen met mysql_real_escape_string.

MySQLi is MySQL, maar dan ietsjes sneller, en heeft ook een klasse. Daarnaast heeft hij volgens mij ook prepared statements.

PDO is wat abstracter, en kan voor verschillende databases gebruikt worden. Daardoor heeft het wat minder MySQL-only features dan bijvoorbeeld MySQLi. Verder is het volgens mij niet langzamer dan de anderen, maar heb je wel de veiligheid van Prepared Statements en het gemak dat je vrij simpel van database kan wisselen.

Ik zou voor PDO gaan, dat is 'de toekomst' zeg maar. De MySQL driver wordt binnenkort (in 5.3) overigens vervangen met mysqlnd, waardoor hij vele malen sneller zou worden. Maar ik denk dat die zowel binnen mysql, mysqli en pdo gebruikt zal gaan worden.

Prepared statements zijn veiliger omdat je niet direct de inhoud van de waarden die je in de query gebruikt in de query zet, dat doet de driver voor je. Daardoor heb je als het goed is geen last meer van SQL injection, en dat zonder dat je handmatig overal mysql_real_escape_string op aan hoeft te roepen.
 
Frank -

Frank -

17/10/2007 10:43:00
Quote Anchor link
Incompleet coorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$query
= 'SELECT * FROM tabel WHERE id=:id'; // let op :id

$stmt = $dbh->prepare($query);

// variabelen in de query zetten:
$stmt->bindParam(':id', $_GET['id']);

// uitvoeren query:
$stmt->execute();
?>
 
Jelmer -

Jelmer -

17/10/2007 10:45:00
Quote Anchor link
Wel even oppassen, fout die veel voorkomt: bindParam heeft een variabele nodig, en niet een waarde. Hij verbindt hem by reference, zodat de waarde dus niet gekopieerd wordt, maar later, op het allerlaatste moment wordt uitgelezen door de driver.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$stmt
->bindParam(':id', $_GET['id']); // werkt wel
$stmt->bindParam(':id', 24); // werkt niet

//ranzige oplossing

$stmt->bindParam(':id', $id = 24); // werkt weer wel :P
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Frank -

Frank -

17/10/2007 10:55:00
Quote Anchor link
@Jelmer: Hoevaak ik daar over ben gestruikeld? Ik ben de tel kwijt geraakt. Maar ja, een variabele die niet variabel is, is een beetje ongelukkig gekozen. Dan kun je hem beter direct in de query zetten.

Gelukkig leer ook ik uiteindelijk wel van mijn fouten... ;)
 
Jelmer -

Jelmer -

17/10/2007 11:11:00
Quote Anchor link
Ik ben er ook tig keer over gestruikeld, maar ik snap het argument wel. Ik heb nu de PDOStatement klasse maar uitgebreid met een setParam() method, die dit grapje voor mij doet. Dus bindParam() voor het binden, setParam() voor het handmatig invoeren :)

Situatie waarin ik in de problemen kom heeft er altijd mee te maken dat je een variabele aan een functie mee zou kunnen geven. Is hij wel meegegeven, dan is de waarde in de query variabel. Is hij niet meegegeven, dan vul ik zelf de waarde in. Maar om daar nu 2 aparte queries voor te maken :)
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Ray B

Ray B

17/10/2007 13:27:00
Quote Anchor link
Het is me zo allemaal wat duidelijker geworden.
Ik denk dat PDO voor mij wel een goede oplossing is. Bedankt voor de uitleg!
 



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.