私はSQLステートメントとバインディングパラメータを準備しています。何か問題が生じた場合は、catchブロックでそれらを捕まえます。しかし、私はどのクエリを処理したかを知りたい。 。ここに来て、php PDOで処理されたクエリを見る方法は? !
class PDOTester extends PDO {
public function __construct($dsn, $username = null, $password = null, $driver_options = array()) {
parent::__construct($dsn, $username, $password, $driver_options);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatementTester', array($this)));
}
}
class PDOStatementTester extends PDOStatement {
protected $connection;
protected function __construct(PDO $connection)
{
$this->connection = $connection;
}
public function execute() {
try {
parent::execute();
} catch (PDOException $e) {
$e->errorInfo[3] = $this->queryString;
echo '<pre>';
var_dump($this);
var_dump($this->connection);
echo '</pre>';
throw $e;
}
}
}
しかし:だから私は、インターネット上でそれを見つけたPDOクラスを(拡張ATTR_STATEMENT_CLASSが、本当にここで、正確にわからないので、これは私がやっているか拡張子のコードがあります問題は、私はそれに値をバインドする名前付きパラメータを使用しますが、私は、SQLクエリを見たとき、私は名前付きパラメータではなく値を参照してください
を例えば、私は好きで、それを使用します!
try {
$sql = "INSERT INTO table (column1, column2) VALUES (:column1, :column2)";
$stmt = $db->preapre($sql);
$stmt->bindParam(':column1', $column1, PDO::PARAM_STR);
$stmt->bindParam(':column2', $column2, PDO::PARAM_INT);
$stmt->execute();
} catch (PDOException $e) {
echo $e->errorInfo[3];
}
しかし、私は実際の変数の代わりにcolumn1、:column2という値を参照してください! 誰かが私を助けてくれますか?(たとえば、私が使っている拡張機能の改良版を提供していますか?)
PHPバージョン5.2.17、MySQLバージョン5.0.92
素晴らしい! Thnx、それはとても便利でした! – Orhan
クエリに構文エラーまたは列/フィールドがない場合(PDOExceptionがスローされる可能性が高い理由の1つです)、まだログに記録されますか? (部分的に私の好奇心のため、一部は一般的な説明のため) – Zimzat
実際にMySQLに到達するものはすべてログに記録されます。このようなエラー実装があると仮定して、PDOExceptionをスローする存在しない関数を呼び出すと、その関数はログに記録されません。それは、トランザクションや不正なクエリなどで失敗したクエリをログに記録します。基本的にはMySQLデーモンに到達します。 –