Подскажите пожалуйста как получить массив данных из БД используя php7 и функции mysqli такого вида как в версии php4 было. Я нашел функцию mysqli_fetch_row($result) но с ее помощью я получаю массив с цифровыми ключами а у меня в таблице полей много можно легко запутаться. Поэтому бы хотелось получить массив с ключами полей. $result = mysql_query($q); $id = mysql_result($result, 0, 'id'); Ато я почитал, полазил по интернету, посмотрел какие есть примеры и понял для себя что только через класс можно получить, а как вызов функции уже нельзя?
https://secure.php.net/manual/ru/mysqli-result.fetch-assoc.php mysqli так же поддерживает и процедурный стиль.Почитай документацию
Ответ нашел: Только разъясните пожалуйста как этот код работает: Код (Text): $result=mysqli_query($link_db, $q); for ($i=0; $i < mysqli_num_rows($result); $i++) { $row = mysqli_fetch_array($result, MYSQLI_ASSOC); print_r($row); echo '<br>'; } Вижу что используется цикл но не вижу на что влияет цикл. Уж войдите в положение - хочу разобраться чтоб знать как уже сделанные команды переписать для версии php7. Дело в том что у меня есть пару запросов которые не зачем прогонять через цикл так как получаю один единственный результат. поэтому в php4 я бы их значение вывел написав вот так: Код (Text): $id = mysql_result($result, 0, 'id'); А как тут написать вывод без цикла? --- Добавлено --- alexblack спасибо за ссылку. Просто столкнулся с данными функциями впервые и став искать ответ натыкался на работу через классы. Да и запись исполнения отличается вот и ищу ответы чтобы быстро вникнуть что да как.
Подскажите пожалуйста что за ошибка получилась. При повторном прохождении переменной через полученный массив выдается ошибка: Undefined offset: 1. Вывожу по отдельности все хорошо. Вот код: Код (Text): $res = mysqli_fetch_all($result, MYSQLI_ASSOC); // получил массив из БД print $res[0]['id']; print $res[1]['id']; // проверил его на вывод все замечательно $id=$res[1]['id']; print 'ida='.$id; // проверил на присвоение второго прохода все тоже хорошо // а вот сам цикл, и вот при прохождении в нем второй раз вылазит ошибка for ($num=0; $num<$rows; $num++){ $id = $res[$num]['id']; print 'n='.$num.'id='.$id.'</br>'; } Подскажите в чем может быть дело.
вот тут надо научиться тебе логично понимать ошибку. На какую строку указывает ошибка ? --- Добавлено --- и еще пример: PHP: $res = mysqli_fetch_all($result, MYSQLI_ASSOC); print_r( $res );
MouseZver на вот эту строчку которая в цикле: Код (Text): $id = $res[$num]['id']; А при выводе цикла на экран первый проход нормальный потом ошибка и переменная $id пустая. Значит первый проход прошел успешно.
окай перед циклом фор пропишите: PHP: printf ( 'кол-во строк: %d<br>ROWS: %d', count ( $res ), $rows );
Количество элементов в массиве я получаю вот так: $rows=count($res). Количество равно 2. Поэтому и должно быть 2 прохождения. Первый проход успешный второй нет. Проверяю я наличие в массиве переменных через print_r ($res); И получаю что да массив с данным вторым ключом [id] есть и значение в нем есть: Код (Text): Array ( [0] => Array ( [id] => 2 ) [1] => Array ( [id] => 1 ) )
ошибки нету, если ты конечно count не забыл PHP: <?php # php version 7.2 error_reporting ( E_ALL ); $res = [ 0=>['id'=>2], 1=>['id'=>1] ]; $rows = count($res); for ($num=0; $num<$rows; $num++){ $id = $res[$num]['id']; print 'n='.$num.'id='.$id.'</br>'; } ознакомься с циклом foreach
Написал пока тогда вот так: Код (Text): PHP Version 7.0.15 $rows=mysqli_num_rows($result); while ($row = mysqli_fetch_assoc($result)) { $id =$row["id"]; $idk =$row["id_komp"]; $idv =$row["id_vak"]; }; Но хотелось бы чтобы тот код работал. Причем ошибку он выдал у таблицы что частично заполнена у остальных ошибку не выдал я туда еще данные не заносил. Занесу и офигею. Вот эту переменную $rows завел для основного цикла. --- Добавлено --- MouseZver подскажи а может это у меня из-за того что теперь надо открывать соединение, выполнять запрос и закрывать его. Т.е. у меня в функциях прописано так: 1)Получить линк доступа, $link_db=con_db(); 2) строка sql запроса, $query = "SELECT"; 3) выполнить запрос, $result = mysqli_query($link_db,$query); 4) получить массив если буду работать с записями, $res = mysqli_fetch_all($result, MYSQLI_ASSOC); 5) получить кол-во записей, $rows=mysqli_num_rows($result); - если нужно только кол-во записей или $rows=count($res); если работаю с записями 6) вывести в цикле записи, for ($num=0; $num<$rows; $num++){ $id = $res[$num]['id']; } 7) закрыть соединение. mysqli_close($link_db); И опять идет запрос того же характера. Правда если я делаю несколько запросов в одной функции то линк доступа я получаю вначале функции и закрываю его в конце. Может в этом дело. Раньше то я один раз подключился к БД выполнил все функции и в конце мог закрыть. А тут раз постоянно надо линк прописывать то я его закрываю сразу же как использовал в функции.
MouseZver подскажи пожалуйста просто сейчас читаю всякого рода статьи взаимодействия php7 и mysqli и обнаружил вот какой код Код (Text): /* Освобождаем используемую память */ mysqli_free_result($result); После вызова запроса вот эту команду используют. Может из-за этого у меня возникла проблема? Я данную команду не использовал просто закрывал соединение.