Я пытаюсь понять, как / почему fetch_assoc работает так, как он делает. У меня есть следующий код:
$results = $connectToDb->fetch("SELECT * FROM customer"); $resultsArray = $results->fetch_assoc(); print_r($resultsArray); //print_r 1 while($row = $results->fetch_assoc()){ print_r($row); //print_r 2 }
Запрос возвращает 3 строки из таблицы. Почему первый print_r возвращает только первую строку запрошенных данных, а второй print_r возвращает все 3? Как помещать fetch_assoc в цикл while, чтобы он выполнял действие более одного раза? Я читал, что fetch_assoc возвращает либо ассоциативный массив, либо NULL, но я изо всех сил пытаюсь понять, как цикл while «говорит» fetch_assoc, чтобы получить следующую строку, если это имеет смысл?
Спасибо.
Давайте попробуем понять ваш код и как он работает:
$results = $connectToDb->fetch("SELECT * FROM customer");
Переменные $results
имеют набор строк, возвращаемых запросом. Размер коллекции может быть от 0 до n.
$resultsArray = $results->fetch_assoc();
Эта строка извлекает первый элемент из коллекции. Если коллекция пуста, она вернет NULL
.
while($row = $results->fetch_assoc()){ }
Он может быть разделен на следующие этапы:
$row = $results->fetch_assoc()
и вернуть массив с элементами или NULL . $row = $results->fetch_assoc()
в while
с полученным значением и получите следующие инструкции: while(array(with elements))
или while(NULL)
. while(array(with elements))
он разрешает условие while в True
и позволяет выполнять итерацию. while(NULL)
оно разрешает условие while в False
и выходит из цикла.