2012-06-20 25 views
10

Estoy buscando un ejemplo completo de PHP PDO con las mejores prácticas para ejecutar una consulta y manejar errores. Esto es lo que tengo hasta ahora.PHP PDO para Dummies

CONNECTING. Si no lo hace de esta manera, una falla de conexión expondrá de forma predeterminada las credenciales de base de datos a todos los usuarios de su sitio.

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

consultar

$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(); 

Sin embargo, esto se traduce en consultas que no (ejecutar devuelve falso) y el mensaje de error está en blanco.

Respuesta

14

guía de un motor de arranque moderna para Here DOP 's. Responde algunas de sus preguntas y explica muchas otras funciones básicas de PDO.

¡Acabo de leerlo ayer y lo encontré un excelente recurso!

He aquí una cita en virtud de 'errores':

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

Me acabo de enterar que el 70% de las personas, lo que desea es la clase más simple envoltorio DOP por ahí. PDO está sobre-diseñado con excepciones y todo porque no se supone que debes usarlo directamente ... se supone que debes esconder toda esta porquería en tu clase DB. –

3

Por defecto, pdo no lanza excepciones sobre errores.

que tiene que hacer configurarlo para

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

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