Почему не работает результат запроса?

Есть код в начале файла. Исходя из переданного interface я формирую два результата запроса.
$mysqli_web_result и $mysqli_program_result
//Веб
if ($all_about_user['interface']=='web')
{
$mysqli_web_request="SELECT * FROM `users` WHERE  `login`='$mylogin' LIMIT 1";
$mysqli_web_result=$mysqli->query($mysqli_web_request) or die ($mysqli->error);
}
//Программа
if ($all_about_user['interface']=='program')
{
$mysqli_program_request="SELECT * FROM `users` WHERE `login`='$login' LIMIT 1";
$mysqli_program_result=$mysqli->query($mysqli_program_request) or die ($mysqli->error);
}


Далее, в коде, я работаю с этими результатами
$num_rows = $mysqli_program_result->num_rows;
if ($num_rows==1) 
{
$row=$mysqli_program_result->fetch_assoc();
.....
}


И в конце файла я хочу ещё раз поработать с результатом
if ($all_about_user['interface']=='web') $mysqli_result=$mysqli_web_result;
if ($all_about_user['interface']=='program') {$mysqli_result=$mysqli_program_result; echo 'Мы тут!';}

$row = $mysqli_result->fetch_assoc();
$all_about_user['id']=$row['id']; //не получит, если program т.е. $mysqli_program_result


Но, для $mysqli_web_result все корректно работает.
А для $mysqli_program_result нет - т.е. не может получить $row['id'] и любые значения. Но только в конце. Выше может.
Код не использует пространства имен, функции (простой) т.е. проблем области видимости быть не должно.
Скрипт входит в этот блок кода (Мы тут).

Как я вижу, разница между $mysqli_web_result и $mysqli_program_result только в использовании
$row=$mysqli_program_result->fetch_assoc();
$mysqli_web_result в коде использует это 1 раз, а $mysqli_program_result - два.

Вот все строки из файла (сверху вниз) содержащие использование $mysqli_program_result
$mysqli_program_result=$mysqli->query($mysqli_program_request) or die ($mysqli->error);
.....
$num_rows = $mysqli_program_result->num_rows;
.....
$row=$mysqli_program_result->fetch_assoc();
.....
if ($all_about_user['interface']=='program') $mysqli_result=$mysqli_program_result;
.....
$row = $mysqli_result->fetch_assoc();


Почему не работает результат запроса $mysqli_program_result()?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
roswell
@roswell
и швец, и жнец, и на дуде игрец
Проблема тут:
$mysqli_program_result - два.

После очередной выборки fetch-функции сдвигают курсор на следующую строку, и во второй раз там уже нечего выбирать, учитывая LIMIT 1. Я бы присвоил результат первой выборки какой-нибудь переменной и использовал в дальнейшем её.
Кстати, тут недавно (c версии 5.1) подвезли PDO и prepared statements, если интересно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Radjah
@Radjah
Дублирование кода - это раз.

php.net/manual/ru/mysqli-result.fetch-assoc.php

У тебя на выходе максимум один ряд, который ты получаешь при первом вызове fetch_assoc. Второй вызов возвращает NULL, потому что читать больше нечего.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы