0

サイトをPDOに変換しているところですが、これが初めての露出ですが、PDOから有用なエラー情報を取得するのに苦労しています。私はこの主題に関する他の多くの投稿を読みましたが、それらのどれも私のために働く解決策を提供していないようです。

コードは次のとおりです。

try {
    $dbh    = new PDO("mysql:host=".CO_DB_HOST.";dbname=".CO_DB_NAME, CO_DB_UNAME, CO_DB_PWORD);

    $dbh    ->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(PDOException $e) {
    echo $e->getMessage();
}


function addRec($data) {

    global $part_id, $dbh;
    $part_id++;

    try {
        $sth=$dbh->prepare("
            INSERT INTO 
                non_existent_table
                (
                    name
                ) VALUES (
                    ?
                );
        ");

        for ($i = 0; $i < count($data); $i++) {
            $sth->execute($data[$i]);
        }
    }

    catch(PDOException $e) {
        echo "Something went wrong. Please report this error.";
        file_put_contents('/PDOErrors.txt', PDOStatement::errorInfo(), FILE_APPEND);
    }
}

// Insert a database record
$data = array(
        array(
            'joe blogs',    /* name */
        )
);
addRec($data);

テーブルは存在しませんが、PDOError.txtにエラーがなく、httpdエラーログにも何も表示されません。誰かが私が間違っていることに光を当てることができますか?ありがとう。

4

1 に答える 1

2

errorInfo()静的な方法ではありません。また、文字列ではなく配列を返します。

例外の情報で問題ないはずです。代わりにこのようなものを使用してください

file_put_contents('/PDOErrors.txt', $e->getMessage(), FILE_APPEND);

追加情報については、stacktraceを追加することもできます。

編集

エラーログの正しいファイルパスは確か/PDOErrors.txtですか?それはファイルシステムのルートにありますが、それがあなたが望むもの、あるいは可能でさえあるとは思えません。

于 2012-12-03T05:11:14.100 に答える