10

クエリの実行とエラー処理のベスト プラクティスを含む PHP PDO の完全な動作例を探しています。これが私がこれまでに持っているものです。

接続しています。このようにしないと、接続に失敗すると、デフォルトで DB 資格情報がサイトのすべてのユーザーに公開されます。

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

クエリ中

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

ただし、これによりクエリが失敗し (execute が false を返す)、エラー メッセージが空白になります。

4

2 に答える 2

15

これは、 PDOの最新のスターター ガイドです。いくつかの質問に答え、その他の多くの基本的な 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();
}
于 2012-06-20T06:41:55.273 に答える
3

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

あなたはそれを設定する必要があります

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

// or
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
于 2012-06-20T04:39:03.460 に答える