2017-02-20 8 views
0

Привет там,MySQLi подготовленное заявление не работает в While Loop

Я работаю на запрос внутри цикла While. Однако второй запуск не работает. (The While заканчивается позже, после того, как некоторые результаты получают эхо). Я попытался вызвать второй запрос $stma, однако это привело к той же ошибке.

Ошибка

Fatal error: Call to a member function bind_param() on a non-object in PATH on line 96 

Код

// Prepare Query 
    $stmt = $db->prepare("SELECT id, fullname, shortname FROM languages WHERE (state = '0')"); 
    $stmt->execute(); 

    // Get result from query. 
    $stmt->bind_result($lang_id, $lang_name, $lang_short); 

    // While Loop 
    while($language = $stmt->fetch()){ 

     // Get Language Texts 
     $stmt = $db->prepare("SELECT id, article_id, article_language, article_text, article_recuse, article_spec FROM article_content WHERE article_id = ? AND article_language = ?"); 

     $stmt->bind_param("is", $artikel_nummer, $lang_short); // This is line 96. 
     $stmt->execute(); 

     // Get result from query. 
     $stmt->bind_result($t_id, $t_articleid, $t_language, $t_text, $t_recuse, $t_spec); 
     $stmt->fetch(); 

Я довольно новыми для подготовленных заявлений, так что я не уверен, что именно эта проблема. Я запустил var_dump() по запросу, и он вернул false, однако работает запрос в другом месте или за пределами цикла WHILE (когда я определяю две переменные вручную).

Я эхом отозвался $artikel_nummer и $lang_short, и он возвращает их значения.

Вопрос следующий: Почему второй запрос не работает и, таким образом, возвращает ошибку, как указано выше?

+1

вы ничего с '$ language' для цикла не делает, ни для' $ lang_id' или '$ lang_name'. –

+0

Вы переписываете переменную '$ stmt', но все еще пытаетесь извлечь ее из каждой итерации. – Phil

+0

Вы выполняете инструкцию перед привязкой к ней значений. – Mike

ответ

1

В вашей схеме вы переопределяете переменную $stm, которая содержит ссылку на ваш исходный подготовленный оператор (и действительно является условием вашего цикла). Для всех запросов происходит внутри цикла, вы должны выбрать другое имя переменной:

while($language = $stmt->fetch()){ 

     // Get Language Texts 
     $_stmt = $db->prepare("SELECT id, article_id, article_language, article_text, article_recuse, article_spec FROM article_content WHERE article_id = ? AND article_language = ?"); 

     $_stmt->bind_param("is", $artikel_nummer, $lang_short); // This is line 96. 
     $_stmt->execute(); 

     // Get result from query. 
     $_stmt->bind_result($t_id, $t_articleid, $t_language, $t_text, $t_recuse, $t_spec); 
     $_stmt->fetch(); 
} 
+0

и '$ language' используются где? –

+1

Технически, это важно? Я обеспокоен ошибкой, которая публикуется в вопросе. –

+0

Привет. По-видимому, это частично устраняет ошибку. Он запускает цикл один раз сейчас, и после этого он снова отображает ту же ошибку. – Synthiatic