2013-12-21 1 views
1

Я не уверен, что может быть неправильным с моим кодом, поэтому мне нужна помощь. Я следил за онлайн-учебником, насколько я мог с моими данными, но я не мог сделать это точно так, как они это сделали, поэтому я опубликую ссылку на страницу учебника, которую я использую.Правильная обработка данных из подготовленных команд mysqli в php

tutorial Я имею в виду использование петли foreach с массивом для своих континентов, но такие вещи не работают с моими данными. Поэтому я использовал цикл for, который будет увеличиваться до 5, LIMIT, который я использовал.

$start_from = 0; // arbitrary for this question 
if ($stmt = mysqli_prepare($db, "SELECT ID, name, image_path FROM people WHERE age=? LIMIT ? , 5")) { 
    mysqli_stmt_bind_param($stmt, "ii", $_GET['age'], $start_from); 
    mysqli_stmt_execute($stmt); 
    $result = mysqli_stmt_get_result($stmt); 
    for($counter=0; $counter <=5; $counter++) /* "$counter <= 5" because my SQL query is limited to this number of items. */ 
    { 
     while($row = mysqli_fetch_array($result, MYSQLI_NUM)) { 
      foreach ($row as $r) { 
       print_r("$r "); 
      } 
      print "\n"; 
     } 
    } 
    mysqli_stmt_close($stmt); 
} 

Что может быть не так?

+0

'LIMIT? , 5' никогда не видел этого раньше. Вы пробовали просто «LIMIT 5»? –

+0

Какая польза от 'counter' loop здесь? Я не думаю, что это необходимо. –

+0

Я тоже мог это сделать. Fred -ii- встречный цикл похож на то, что было в учебнике, я думаю. – eric

ответ

0

@Fred уже поставил диагноз первой проблемы в комментариях, поэтому я помету свой ответ CW. То есть, ваш цикл for от 0 до 5, который фактически работает для шести итераций.

Но это не единственная логическая проблема в вашем коде. Рассмотрим это:

for($counter=0; $counter < 5; $counter++) { 
    while($row = mysqli_fetch_array($result, MYSQLI_NUM)) { 
     ... 

Цикл for выполняет свой блок в пять раз. Но внутренний блок использует while для извлечения всех строк в результирующем наборе на первой итерации цикла for.

На второй-пятой итерации цикла for он пытается вызвать mysqli_fetch_array(), но как только результат запроса был прочитан один раз, эта функция вернет значение null для всех последующих раз, когда вы его вызываете. Таким образом, не существует цикла for.

В этом случае нет никакого вреда, потому что цикл while просто видит нуль и завершает работу до того, как он запускает одну итерацию. Но эта ошибка кодирования может укусить вас в каком-то будущем проекте.

+0

О, так что я просто запускаю цикл while несколько раз, я вижу .. это было необязательно. Я полностью переписал свой код, исключая цикл for. – eric

+0

Я также использую 'while ($ row = mysqli_fetch_assoc ($ result) {' вместо этого. – eric

+0

В ретроспективе я мог бы задавать такие вопросы, чтобы иметь лучшую запись: нужен ли мне этот 'foreach()' или 'for()' loop в моем коде ?, а также, как это сделать с помощью while ($ row = mysqli_fetch_assoc ($ result) {'вместо? – eric

Смежные вопросы