Подготовленный оператор MySQLi не работает в цикле 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и возвращает их значения.

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

0

Решение

В вашем цикле вы переопределяете $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();
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector