5

私のPHPスクリプトでは、次のように更新ステートメントを実行します。

$this->_db->update('names', $data, $this->_db->quoteInto('id = ?', $obj->id));

dbハンドルは、(PDO MySqlの種類の)Zend_Db_Adapter_Abstractインスタンスです。

問題は、更新が失敗していて、エラーに関する詳細情報を取得できないように見えることです。

エラーはtry/catchブロック内で発生します。エラーを見つけたら、次のコマンドを実行します。

$db->getProfiler()->getLastQueryProfile();

そして、出力は次のとおりです。

2012-11-14T22:20:02+11:00 INFO (6): Zend_Db_Profiler_Query Object
(
    [_query:protected] => begin
    [_queryType:protected] => 64
    [_startedMicrotime:protected] => 1352892002.6064
    [_endedMicrotime:protected] => 1352892002.6066
    [_boundParams:protected] => Array
        (
        )

パラメータがバインドされていないと表示されていることは知っていますが、実際にはそうではないと思います。どういうわけか「最後のクエリ」は私が思っているものではないと思います。

次に、エラーをキャッチすると、次のコマンドも実行します。

$db->getConnection()->errorInfo();

そして、出力は次のとおりです。

2012-11-14T22:20:02+11:00 INFO (6): Array
(
    [0] => 00000
    [1] => 
    [2] => 
)

明らかに、これはあまり役に立ちません。

何か案は?エラーに関する詳細情報を取得するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

1

PDOにすべての情報を含む例外をスローさせることができます。

<?php

$this->_db->->getConnection()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


try {
    $this->_db->update('names', $data, $this->_db->quoteInto('id = ?', $obj->id));
}
catch (Exception $ex) {
    print_r($ex);
}
于 2012-11-14T12:00:58.560 に答える