3

私は CodeIgniter 2.1.3 を使用しており、データベース ドライバーとして PDO でアクティブ レコード クラスを使用しています。

CodeIgniter が誤った update ステートメントでエラーを報告しないという問題に遭遇しました。重複キーに明らかに違反している、または列名が正しくないクエリを作成できますが、CodeIgniter は次のようにエラーをまったく発生しません。

echo $this->db->_error_message(); //returns nothing
echo $this->db->_error_number();  //returns '0000'

MySQLしかし、ドライバーとして使用するように切り替えるとすぐに、エラー メッセージが表示されます。

$this->db->query(.... //violating statementアクティブなレコード クラスをバイパスしようとしても運が悪く、エラーが増えました。

私は持ってい$db['default']['db_debug'] = TRUE;ます。

PDO を使用すると運が悪いのでしょうか、それとも CodeIgniter で PDO を使用する場合に変更する必要がある追加の構成設定がありますか?

4

1 に答える 1

2

PDO ドライバーを調べると、PDO 接続が完了してPDO::ATTR_ERRMODE => PDO::ERRMODE_SILENTおり、エラーが発生していないことがわかります。

一般に、PDO が例外をスローするようにしたい場合は、接続オプションで以下を渡します。

array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false
);

PDO を使用する場合は、PDO ダイレクトを使用します。PDO は優れた抽象化レイヤーです。いずれにせよ CI DB ドライバーを使用する場合は、mysql よりもこれを選択したり、その逆を選択したりすることによる実際の利点は見当たりません。

于 2013-06-01T18:29:09.477 に答える