Как PDO::prepare() генерирует объект PDOStatement?

Как свойство только для чтения $queryString устанавливается внутри класса PDOStatement при выполнении PDO::prepare()?

Учитывая определение класса, я не вижу никаких функций, которые могли бы установить этот запрос. Означает ли это, что класс PDOStatement нельзя использовать, если он не сгенерирован экземпляром класса PDO с помощью функции PDO::prepare()?


person dchayka    schedule 26.06.2015    source источник
comment
Ему не нужно раскрывать какие-либо методы установки. PDOStatement создается и заполняется внутри PDO. Хотя вы можете создать его вручную, он не будет ни к чему подключен и не будет использоваться в другом случае.   -  person mario    schedule 26.06.2015


Ответы (2)


PDOstatement создается внутри с помощью кода C. И, конечно же, код C может устанавливать любые свойства напрямую.

И да, вы не можете использовать класс PDOStatement (для чего-либо полезного), если он не сгенерирован экземпляром класса PDO через PDO::prepare() (или query()).

Однако вы можете повторно объявить и указать PDO использовать его вместо стандартного, используя такой код.

$pdo->setAttribute(PDO::ATTR_STATEMENT_CLASS, ['myPDOStatement', [$pdo]]);
person Your Common Sense    schedule 26.06.2015

Из руководства:

Введение


[класс PDOStatement] Представляет подготовленный оператор и, после выполнения оператора, связанный набор результатов.

Похоже, это должно быть создано PDO::prepare().

Но разве это проблема? Не могу сказать, что сталкивался с ситуацией, когда я хочу создать объект PDOStatement вручную.

person AbcAeffchen    schedule 26.06.2015
comment
Это совсем не проблема. Мне просто было любопытно, как создать объект без раскрытия функции, которая устанавливала бы строку запроса для создания объекта PDOStatement. Мне никогда не приходилось создавать объект PDOStatement вручную. - person dchayka; 26.06.2015