|
De error afhandeling is van PDO is eigenlijk vrij eenvoudig, na de execute kun je via de methode errorInfo of errorCode de fout opvragen.
Error info zal een array terug geven met 3 keys, terwijl de methode errorCode de error code teruggeeft
Key 0 is de zo genoemde SQLSTATE error code, deze fout meldingen zijn gedefinieerd in de ANSI SQL standaard. Key 1 is een error code welke specifiek voor de driver is.
Key 2 is het daadwerkelijker tekstuele bericht van de error, hierin word uitgelegd wat er mis is gegaan bij de sql query, zoals je dit ook kunt verwachten van bijvoorbeeld mysql_error()
Hieronder is een voorbeeld van een error code die gegenereerd is door een verkeerde query :
$dbs = $pdo->prepare('SELFECT bar FROM tabel WHERE foo = :foo LIMIT 1');
$params = array(
':foo' => 'webmasterstart.nl'
)
$dbs->execute($params);
print_r($dbs->errorInfo());
Array
(
[0] => 42000
[1] => 1064
[2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELFECT bar, foo FROM tabel' at line 1
)
De magic_quotes en addslashes hel.
In de vorige hoofdstukken heb ik niets verteld over de veiligheid van de query's.
Zoals de meeste van ons inmiddels wel gewend zijn is het onwaarschijnlijk irritant dat de ene webhoster wel magic quotes aan heeft, en de volgende niet.
Dit houd in dat je meestal scripts moet aanpassen om wel of niet de addslashes weg te halen, of op een andere manier hier om heen programmeren.
Dit soort constructies zullen de meeste van ons wel erkennen :
function add_slashes($p_sData) {
if ( get_magic_quotes_gpc() !== 1 ) {
return addslashes($p_sData);
}
}
Dit is helaas niet zo feilloos als PDO dit doet, jij bent immers ook maar mens, en de kans dat je een keer deze addslashes er niet omheen zet is behoorlijk aanwezig.
De integriteit van de code aangetast, en je script is niet zo veilig wat je in eerste instantie had verwacht.
Maar dankzij PDO is deze hel voorbij, PDO bekijkt zelf zijn ingevulde waardes en doet hier addslashes omheen.
Je hoeft je dus geen zorgen meer te maken over de potentiële veiligheids risico's op basis van slashes.
Indien de bagger "feature" magic_quotes_gpc aan staat ( te zien met phpinfo() of get_magic_quotes_gpc() ), zet deze ook nog extra slashes om je invoer data heen.
Zet de magic quotes rotzooi dus uit! Anders is het stripslashes van je invoer alsnog onvermijdelijk, en val je weer terug op de inconsistentie van de code.
Conclusie
Gebruik PDO, zet magic_quotes_gpc uit, het maakt het php leven gegarandeerd een stuk aangenamer.
Let wel, er zijn nog veel mogelijkheden van PDO die ik hier niet heb beschreven, deze zijn ook zeker het bekijken waard.
Helaas, zoals bij meerdere dingen, heeft niet elke database dezelfde features aan boord. PDO heeft dus ook features die niet door elke database type gesupport word, als je deze functionaliteiten wilt gaan gebruiken,
weet dan, dat het switchen tussen databases lastiger word.
Zie het voorbeeld bestand voor alle code in een losse file.
Supported Databases
Hieronder nog een lijstje van drivers welke door de PDO interface gebruikt kunnen worden.
Uiteraard moeten deze drivers door je webhoster geïnstalleerd zijn wil je deze gebruiken.
| PDO_DBLIB |
FreeTDS/Microsoft SQL Server/Sybase |
| PDO_FIREBIRD | Firebird/Interbase 6 |
| PDO_IBM | IBM DB2 |
| PDO_INFORMIX | IBM Informix Dynamic Server |
| PDO_MYSQL | MySQL 3.x/4.x/5.x |
| PDO_OCI | Oracle Call Interface |
| PDO_ODBC | ODBC v3 (IBM DB2/unixODBC/win32 ODBC) |
| PDO_PGSQL | PostgreSQL |
| PDO_SQLITE | SQLite 3 and SQLite 2 |
|