Проблема с PEAR::DB prepare() (база - MySQL)

Ямерт

The Old One
Проблема с PEAR::DB prepare() (база - MySQL)

Привет!

У меня проблема - решил использовать DB_Common::prepare() и DB_Common::execute(), и не получается ничего добиться.

Код такой:
PHP:
$DB = initDBConnection(); // Установка соединения
if (DB::isError($DB)) 
  die ($DB->getMessage());
$x = $DB->prepare("SELECT * FROM MPM_PAYMENT_TYPES  WHERE TYPE_ID=?");
echo "x = " . $x . ", type: "  . gettype($x);
Выдаётся: "x = 0, type: integer".
Причём коннекция к базе установлена, запросы возвращают результаты. Вроде как всё в порядке.

Но тогда какого чёрта prepare() возвращает 0????
Даже не null, a 0!
По документации этот метод должен возвращать resource!

ЗЫ. Испольлзую последнюю версию DB, 1.5.
Делал по примерам из мана: http://pear.php.net/manual/en/package.database.db.intro-execute.php
Помогите, please!
 

Ямерт

The Old One
Я погуглил, и нашёл workaround!
Что называется, надо RTFMить тщательнее.
$result = <DB_obj>->query(<query_tpl>, array(<replacements>));
Т.е. типа
$DB->query("SELECT ? FROM Foo WHERE ?=?", array('field1', 'field2', 'field2_val'));

Это касается всех методов get*:
Parameter

string $query
the SQL query or the statement to prepare

array $params
if supplied, prepare()/ execute() will be used with this array as execute parameters
 

Ямерт

The Old One
Но всё же это баг, господа, явный баг (см. первый пост).
Делаю bug report.
Готово: http://bugs.php.net/bug.php?id=25311

Надеюсь, те 2.5часа, что я убил на решение проблемы, сэкономят время кому-то другому.
 

Ямерт

The Old One
...and so it ends:

[29 Aug 8:49am CDT] [email protected]

Only backends how natively support prepare/execute will return a
"resource". When it's emulated it just returns an interger we use as
index.

It's a documentation problem not related to the code.
 
Сверху