Цикл Diferencia пещеры, в то время как y foreach

Tengo dos códigos para listar una consulta, la conexión es подставляет PDO.

$BD = new ConexionDB();
$sql = "SELECT cod, nom from tabla";
$sth = $BD->prepare($sql);
$sth->execute();

$valor = 0;
foreach($sth as $fila) {
    $valor++;
    echo $valor." ";
    echo $fila['cod'];
    echo "</br>";
}

Y este otro:

$BD = new ConexionDB();
$sql = "SELECT cod, nom from tabla";
$sth = $BD->prepare($sql);
$sth->execute();

$valor = 0;
while ($fila = $sth->fetch(PDO::FETCH_ASSOC)) {
    $valor++;
    echo $valor." ";
    echo $fila['cod'];
    echo "</br>";
}

Ambos códigos funcionan, pero cuál es la manera óptima de hacerlo? СИ quiero hacer ОБНОВЛЕНИЕ ООН а-ля таблица подставляет доблесть ООН возрастающий colocando este código dentro del bucle en cada caso:

$sql= "UPDATE tabla SET orden = ".$valor." WHERE cod = ".$fila['cod'];
$sth = $BD->prepare($sql);
$sth->execute();

Funciona подставляют el foreach pero никакой funciona dentro del while, mostrando este ошибка:

Фатальная ошибка: Неперехваченное исключение 'PDOException' с сообщением 'SQLSTATE[HY000]: Общая ошибка' в строке (надел está el while),

0
задан 11.01.2017, 19:56
0 ответов

foreach повторяет, а именно превращается в каждый элемент коллекции и Ваша продолжительность службы равна количеству элементов, которые существовали бы в коллекции, это самый оптимальный способ, чтобы манипулировать элементами списков.

while - цикл, который работает до тех пор, пока условие не будет фальшиво и не обязательно только для коллекций :)

1
ответ дан 03.12.2019, 17:45
  • 1
    Во мне казаться этим не правильно, все циклы повторяют, в низком уровне все - то же самое... –  12.01.2017, 07:48

Который я узнал одиноким в MySQL / MySQLi, мог делаться while, я думаю, что лучшая форма будет состоять в том, чтобы ты выбрал все и автоматически это обратил в array.

Немного как это:

$BD = new ConexionDB();
$sql = "SELECT cod, nom from tabla";
$sth = $BD->prepare($sql);
$sth->execute();
$filas = $sth->fetchAll(PDO::FETCH_ASSOC);
$valor = 0;
foreach($filas as $fila) {
    $valor++;
    echo $valor." ";
    echo $fila['cod'];
    echo "</br>";
}
1
ответ дан 03.12.2019, 17:45