2012-06-20 15 views
10

私はPHP PDOの完全な実例を探しており、クエリの実行とエラーの処理に関するベストプラクティスを持っています。ここに私がこれまで持っているものがあります。PHP PDO for Dummies

接続します。このようにしないと、接続障害はデフォルトでサイトのすべてのユーザーにDB資格情報を公開します。しかしながら

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

照会

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

、これは失敗クエリで得られている(falseを返すを実行)し、エラーメッセージが空白です。

答えて

14

Hereの近代的なスターターのガイドにそれを設定し実行する必要があります。いくつかの質問に答えて、他の多くの基本的なPDO機能について説明しています。

私はちょうどそれを読んで昨日、それは優れたリソースを見つけた!

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

私はちょうど人々の70%を、あなただけそこに最も簡単なPDOのラッパークラスを望んでいることが分かった:ここ

は「エラー」の下に引用です。あなたがそれを直接使うべきではないので、PDOは例外やすべてのもので過剰に設計されています...あなたはDBクラスのこのすべての邪魔を隠すことになっています。 –

3

デフォルトでは、pdoはエラー時に例外をスローしません。

あなたはPDOへ

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

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