PDO of ouderwets?
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?
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.
Ik gebruik zelf met veel plezier PDO, het doet alles wat ik nodig heb en werkt uitstekend met PostgreSQL en MySQL.
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.
Code (php)
1
2
3
4
5
6
7
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
?>
$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 -
Gelukkig leer ook ik uiteindelijk wel van mijn fouten... ;)
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 -
Ik denk dat PDO voor mij wel een goede oplossing is. Bedankt voor de uitleg!