私は、クエリーがうまくいかない場合、エラーロギングのためのPDOおよびPDOStatementクラスへの単純な拡張があります。ここに私のコードに簡略化される:
明らかclass MyPDO extends PDO
{
public function __construct($db)
{
try
{
parent::__construct('mysql:host=localhost;dbname=' . $db, $user, $pass);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('MyPDOStatement', array($this)));
}
catch(PDOException $e)
{
$this->error(array($e->getCode(), $e->getMessage(), '08006'));
}
}
function query($query)
{
$stmt = parent::query($query);
if ($stmt !== false)
return $stmt;
else
{
$this->error($this->errorInfo(), $query);
return false;
}
}
function error($info, $query = false)
{
// log error here
}
}
、私は準備()とexec()メソッド、および同様の文クラスのexecute()メソッドを上書きしています。これらの(または上記のようなquery()に)エラーがある場合、それらはすべて正常に動作します。問題はPDOがデータベースへの接続に失敗したときに、「PHP致命的なエラー:キャッチに含まれる行の非オブジェクト上のメンバ関数error()コール」エラーが発生することです。
私はキャッチのMyPDO :: error()で置き換えようとしましたが、エラーで何もしないようです。私は問題が何であるかに困惑しています。
奇妙に見えます。興味深いことに、 'parent :: __ construct'が何をしているのか分かりません。 –
@Pekka PDOインスタンスを作成しようとしていますが、おそらく$ userと$ passが存在しないので恐ろしく失敗します。 – Gordon
@Gordon true :)しかし、私はこれを引き起こすために '$ this'に何をするのかというよりむしろそうでした。あなたは説明がありますか?私は1つ考えることができません。 '$ this 'はコンストラクタで設定解除できますか? –