2012-06-20 8 views
10

Ich bin auf der Suche nach einem voll funktionsfähigen PHP PDO-Beispiel mit Best Practices zum Ausführen einer Abfrage und zur Handhabung von Fehlern. Hier ist, was ich bisher habe.PHP PDO für Dummies

ANSCHLUSS. Wenn Sie dies nicht tun, werden bei einem Verbindungsfehler die DB-Anmeldeinformationen standardmäßig allen Benutzern Ihrer Site zugänglich gemacht.

try { 
    $dbh = new PDO("mysql:host=localhost;dbname=phor_lang", "phor_lang", "'9lsnthsn9"); 
} catch (PDOException $e) { 
    error(false, "PDO ERROR: " . $e->getMessage()); 
} 

abfragt

$stmt = $dbh->prepare("INSERT INTO sets"); 
$stmt->execute() 
    or error(0, "USERS ERROR ".__LINE__." ".print_r($dbh->errorInfo(),true)); 
$setID = $dbh->lastInsertID(); 
$stmt->closeCursor(); 

$stmt = $dbh->prepare("INSERT INTO words (language, name, detail, user, type, set) VALUES (?, ?, ?, ?, ?, ?)"); 
$stmt->execute(array($l1l, $l1w, $l1d, $userID, 'training', $setID)) 
    or error(0, "USERS ERROR ".__LINE__." ".print_r($dbh->errorInfo(),true)); 
$stmt->closeCursor(); 

Dies ist jedoch in Anfragen führt, die fail (auszuführen kehrt false) und die Fehlermeldung leer ist.

Antwort

14

Here ist ein moderner Starter-Guide für PDO konfigurieren zu tun. Es beantwortet einige Ihrer Fragen und erklärt eine Menge anderer PDO-Grundfunktionen.

Ich habe gerade gestern darüber gelesen und fand es eine ausgezeichnete Ressource!

Hier ist ein Zitat unter ‚Fehler‘:

try { 
    $conn = new PDO('mysql:host=localhost;dbname=myDatabase', $username, $password); 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $e) { 
    echo 'ERROR: ' . $e->getMessage(); 
} 
+3

ich für 70% der Menschen gerade herausgefunden, dass Sie nur die einfachste PDO-Wrapper-Klasse wollen da draußen. PDO ist mit Ausnahmen und allem, weil Sie es nicht direkt verwenden sollen, überentwickelt ... Sie sollten all diesen Mist in Ihrer DB-Klasse verstecken. –

3

Standardmäßig löst pdo bei Fehlern keine Ausnahmen aus.

müssen Sie es

$dbh = new PDO("...", "...", "...", array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
)); 

// or 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);