Стандартная документация в руководстве по PHP обычно довольно полезна. В руководстве по PHP приведен пример выполнения цикла for с PDO: Подробности PDO .
function getFruit($conn) {
$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
foreach ($conn->query($sql) as $row) {
print $row['name'] . "\t";
print $row['color'] . "\t";
print $row['calories'] . "\n";
}
}
С некоторыми изменениями можно привести пример использования подготовленного оператора.
function getFruit($conn) {
$query = $conn->prepare('SELECT name, color, calories FROM fruit WHERE kind=:kind ORDER BY name');
$query->execute(array(':kind' => 'drupe'));
// alternatively you could use PDOStatement::fetchAll() and get rid of the loop
// this is dependent upon the design of your app
foreach ($query as $row) {
print $row['name'] . "\t";
print $row['color'] . "\t";
print $row['calories'] . "\n";
}
}
Вы также можете использовать цикл while
и PDOStatement::fetch
для получения каждой строки.
function getFruit($conn) {
$query = $conn->prepare('SELECT name, color, calories FROM fruit WHERE kind=:kind ORDER BY name');
$query->execute(array(':kind' => 'drupe'));
// alternatively you could use PDOStatement::fetchAll() and get rid of the loop
// this is dependent upon the design of your app
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
print $row['name'] . "\t";
print $row['color'] . "\t";
print $row['calories'] . "\n";
}
}
Руководство по PHP остается весьма полезным, предоставляя всю необходимую информацию для создания последних двух версий.
Объяснение последней версии: предполагается, что $conn
является допустимым объектом PDO. $conn->prepare($sql)
возвращает объект PDOStatement
в случае успеха, false
при ошибке ИЛИ исключение, основанное на вашей обработке ошибок. Итак, в случае успеха нам бы хотелось получить данные от объекта. Мы можем использовать $query->fetch()
в цикле или $query->fetchAll()
, чтобы получить данные, зависящие от вашего приложения. Передача константы класса PDO::FETCH_ASSOC
вернет, как вы уже догадались, ассоциативный массив данных.
Функционально реализации foreach
и while
эквивалентны. Концептуально, foreach
является более подходящим, поскольку цикл while
имеет коннотации зацикливания, в то время как статическое условие выполняется, тогда как foreach
зацикливает элементы коллекции. Прочитайте « Различия между циклом while и циклом for в PHP? » для части истории.
Обязательно прочитайте ссылку php.net на PDO