Ar2r
Новичок
Товарищи, требуется помощь.
Есть упрощенный класс для работы с БД:
Есть скрипт выполняющий два запроса к БД:
Результат:
Второй массив с данными пустой.
А вот если выполнить unset или $res2 использовать, то проблема не проявляется.
И отличный результат получаем.
Подскажите, как правильно должен быть написал Wrapper для PDO? У всех классов для PDO аналогичная проблема.
Есть упрощенный класс для работы с БД:
PHP:
class DB extends PDO
{
public static $query_count = 0; //счётчик запросов
public function __construct(/*string*/$dsn, /*string*/$user, /*string*/$pass, $driver_option = array())
{
parent::__construct($dsn,$user,$pass,$driver_option);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DB_statement', array($this)));
}
public function DBexec($statement)
{
$rows = parent::exec($statement);
self::$query_count ++;
return $rows;
}
public function DBquery($sql)
{
self::$query_count ++;
return parent::query($sql);
}
}
class DB_statement extends PDOStatement
{
protected $db;
protected function __construct(DB $db)
{
$this->db = $db;
}
public function DBexecute($parameters = array())
{
DB::$query_count ++;
return parent::execute($parameters);
}
}
PHP:
$DB2 = new DB("dblib:host=MSCSSQL01;dbname=IT", '***', '***');
$res = $DB2->DBquery("SELECT 'x' as x");
var_dump($res);
print_r($res->fetchAll());
$res = $DB2->DBquery("SELECT 'y' as y");
var_dump($res);
print_r($res->fetchAll());
Код:
class DB_statement#2 (2) {
protected $db =>
class DB#1 (0) {
}
public $queryString =>
string(15) "SELECT 'x' as x"
}
Array
(
[0] => Array
(
[x] => x
[0] => x
)
)
class DB_statement#3 (2) {
protected $db =>
class DB#1 (0) {
}
public $queryString =>
string(15) "SELECT 'y' as y"
}
Array
(
)
А вот если выполнить unset или $res2 использовать, то проблема не проявляется.
PHP:
$DB2 = new DB("dblib:host=MSCSSQL01;dbname=IT", '***', '***');
$res = $DB2->DBquery("SELECT 'x' as x");
var_dump($res);
print_r($res->fetchAll());
unset($res);
$res = $DB2->DBquery("SELECT 'y' as y");
var_dump($res);
print_r($res->fetchAll());
И отличный результат получаем.
Код:
class DB_statement#2 (2) {
protected $db =>
class DB#1 (0) {
}
public $queryString =>
string(15) "SELECT 'x' as x"
}
Array
(
[0] => Array
(
[x] => x
[0] => x
)
)
class DB_statement#2 (2) {
protected $db =>
class DB#1 (0) {
}
public $queryString =>
string(15) "SELECT 'y' as y"
}
Array
(
[0] => Array
(
[y] => y
[0] => y
)
)