2015-06-26 4 views
-1

Как работает $queryString свойство, устанавливаемое внутри класса PDOStatement по PDO::prepare() исполнении?Как PDO :: prepare() генерирует объект PDOStatement?

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

+0

Это не нужно подвергать любые методы сеттера. «PDOStatement» создается и заполняется PDO внутри. Хотя вы можете создать его вручную, он не будет подключен ни к чему и не будет использоваться по-другому. – mario

ответ

1

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

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

Однако, вы можете переопределить и сказать PDO использовать его вместо стандартного использования кода, как этот

$pdo->setAttribute(PDO::ATTR_STATEMENT_CLASS, ['myPDOStatement', [$pdo]]); 
0

От manual:

Введение


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

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

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

+0

Это не проблема. Мне было просто любопытно в потоке создания объекта без воздействия функции, которая бы установила строку запроса для создания объекта PDOStatement. Мне также никогда не приходилось создавать объект PDOStatement. – dchayka