2009-08-19 12 views
7

Neu in dieser neuen und sicheren Art der Handhabung von SQL in PHP und MySql getrieben Web-basierte Anwendung, um den Code von SQL-Injektionen zu sichern. Ich plane, mysqli mit PDO zu verwenden. Kann mir jemand bitte skizzieren, wie ich anfangen und weitermachen soll.vorbereitete parametrisierte Abfrage mit PDO

Jeder Verweis auf einen Artikel wird ebenfalls hilfreich sein.

Vielen Dank im Voraus.

Antwort

11

Um die Verbindung

try { 
    $db = new PDO("mysql:dbname=".DB_NAME.";host=".DB_HOST,DB_USER,DB_PWD); 
} catch (PDOException $e) { 
    die("Database Connection Failed: " . $e->getMessage()); 
} 

Dann erstellen Sie eine Anweisung

$prep = $db->prepare("SELECT * FROM `users` WHERE userid = ':id'"); 

Wie man sehen kann vorzubereiten, Sie jeden Parameter kennzeichnen Sie mit durch das Vorsetzen beliebige Zeichenfolge möchten ‚:‘. Dann übergeben Sie nur ein Array, das den Parameter (: id) dem Wert bei der Ausführung zuordnet.

if (!$prep->execute(array(":id" => $userinput))) { 
    $error = $prep->errorInfo(); 
    echo "Error: {$error[2]}"; // element 2 has the string text of the error 
} else { 
    while ($row = $prep->fetch(PDO::FETCH_ASSOC)) { // check the documentation for the other options here 
     // do stuff, $row is an associative array, the keys are the field names 
    } 
} 

Statt PDO :: FETCH_ASSOC mit dem „holen“ -Funktion gibt es verschiedene andere Möglichkeiten, um Ihre Daten zu erhalten. Sie können fetchAll verwenden, um ein Array aller Ergebnisse auf einmal zu erhalten, anstatt nur Zeile für Zeile zu gehen. Oder Sie können das Informationsfeld als ein 0-indiziertes Array abrufen oder Sie können die Ergebnisse sogar direkt in eine Klasseninstanz abrufen (wenn die Feldnamen mit den Eigenschaften der Klasse übereinstimmen).

Die gesamte Dokumentation von PDO kann hier gefunden werden: PHP.net PDO Manual

+0

Ich glaube, dass Sie die Anführungszeichen um einen Platzhalter nicht benötigen: '" SELECT * FROM \ 'Benutzer \' WHERE userid =: id "' –

Verwandte Themen