Я готовлю свои операторы sql и привязываю к ним параметры, и если что-то идет не так, я ловлю их в блоке catch.Но я хочу посмотреть, какой запрос я обработал.Поэтому я расширил класс PDO (нашел его в интернете, не совсем уверенный, что я делаю или для чего действительно нужен ATTR_STATEMENT_CLASS. Вот код расширения:
<code>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 '
'; throw $ e;}}}
Но возникает проблема: я использовал именованные параметры для привязки к нему значений, но когда я вижу запрос 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