Как указать fetch_style при использовании подготовленного оператора PDO и интерфейса обхода? - PullRequest
0 голосов
/ 23 мая 2018

Мое соединение pdo настроено для возврата стандартных объектов, и я могу использовать интерфейс обхода для перебора результатов следующим образом:

$stmt=$this->pdo->prepare($sql);
$stmt->execute($arr);
foreach($stmt as $rs) {
    //$rs is a stdObject since the pdo connection is set up to return stdObjects
}

За http://php.net/manual/en/pdo.query.php, Я могу указать fetch_styleи аналогичным образом рассмотрим результаты следующим образом:

$stmt = $pdo->query($sql, PDO::FETCH_ASSOC);
foreach($stmt as $rs) {
    //$rs is an array even though pdo connection is set up to return stdObject since I included `PDO::FETCH_ASSOC`
}

Однако я хочу использовать подготовленный оператор, когда мое соединение pdo настроено для возврата стандартных объектов, и использовать интерфейс обхода для переборамассивы результатов и возврата:

$stmt=$this->pdo->prepare($sql);
$stmt->execute($arr);
foreach($stmt as $rs) {
    // pdo connection is set up to return stdObject.  What can be done to make $rs an array?
}

Как это можно сделать?

Обратите внимание, что приведение типов к массиву не является приемлемым ответом, так как использование интерфейса обхода в первую очередь будетлучший подход.

Однако утверждение, что это невозможно (если это правда), является приемлемым ответом.

1 Ответ

0 голосов
/ 23 мая 2018

Вашей первой остановкой всегда должно быть руководство по PHP ~ PDOStatement :: setFetchMode

$stmt=$this->pdo->prepare($sql);
$stmt->execute($arr);
$stmt->setFetchMode(PDO::FETCH_ASSOC);

foreach($stmt as $rs) {
    // $rs is an array
}

Это установит режим выборки только для конкретного PDOStatement экземпляр и не окажет никакого влияния на будущие запросы.

...