Home Ontwerp je site PHP PDO 3/3 : Error afhandeling

PDO 3/3 : Error afhandeling

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_FIREBIRDFirebird/Interbase 6
PDO_IBMIBM DB2
PDO_INFORMIXIBM Informix Dynamic Server
PDO_MYSQLMySQL 3.x/4.x/5.x
PDO_OCIOracle Call Interface
PDO_ODBCODBC v3 (IBM DB2/unixODBC/win32 ODBC)
PDO_PGSQLPostgreSQL
PDO_SQLITESQLite 3 and SQLite 2

4 + 9 =
 

GOOGLE adsense