我准备我的SQL语句和绑定参数,如果出现问题,我抓住他们在一个catch块。但是,我想看看我处理了哪个查询。所以我扩展了PDO类(在网上找到它,并不完全知道我在做什么,或者ATTR_STATEMENT_CLASS真的在哪里,所以这是扩展的代码:
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 '
';
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