За последние 24 часа нас посетили 22362 программиста и 996 роботов. Сейчас ищут 698 программистов ...

Получение данных php7 из БД функциями mysqli

Тема в разделе "PHP для новичков", создана пользователем victort, 26 янв 2018.

Метки:
  1. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Подскажите пожалуйста как получить массив данных из БД используя php7 и функции mysqli такого вида как в версии php4 было. Я нашел функцию mysqli_fetch_row($result) но с ее помощью я получаю массив с цифровыми ключами а у меня в таблице полей много можно легко запутаться. Поэтому бы хотелось получить массив с ключами полей.
    $result = mysql_query($q);
    $id = mysql_result($result, 0, 'id');
    Ато я почитал, полазил по интернету, посмотрел какие есть примеры и понял для себя что только через класс можно получить, а как вызов функции уже нельзя?
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    victort нравится это.
  3. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Ответ нашел: Только разъясните пожалуйста как этот код работает:
    Код (Text):
    1. $result=mysqli_query($link_db, $q);
    2. for ($i=0; $i < mysqli_num_rows($result); $i++)
    3.   {
    4.   $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    5.   print_r($row);
    6.   echo '<br>';
    7.   }
    Вижу что используется цикл но не вижу на что влияет цикл. Уж войдите в положение - хочу разобраться чтоб знать как уже сделанные команды переписать для версии php7. Дело в том что у меня есть пару запросов которые не зачем прогонять через цикл так как получаю один единственный результат. поэтому в php4 я бы их значение вывел написав вот так:
    Код (Text):
    1. $id = mysql_result($result, 0, 'id');
    А как тут написать вывод без цикла?
    --- Добавлено ---
    alexblack спасибо за ссылку. Просто столкнулся с данными функциями впервые и став искать ответ натыкался на работу через классы. Да и запись исполнения отличается вот и ищу ответы чтобы быстро вникнуть что да как.
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.321
    Адрес:
    Лень
    PHP:
    1.  -> fetch_all( MYSQLI_ASSOC );
     
    victort нравится это.
  5. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    MouseZver спасибо то что надо
     
  6. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Подскажите пожалуйста что за ошибка получилась. При повторном прохождении переменной через полученный массив выдается ошибка: Undefined offset: 1. Вывожу по отдельности все хорошо.
    Вот код:
    Код (Text):
    1. $res = mysqli_fetch_all($result, MYSQLI_ASSOC); // получил массив из БД
    2.  
    3. print $res[0]['id'];
    4. print $res[1]['id']; // проверил его на вывод все замечательно
    5. $id=$res[1]['id']; print 'ida='.$id; // проверил на присвоение второго прохода все тоже хорошо
    6.  
    7. // а вот сам цикл, и вот при прохождении в нем второй раз вылазит ошибка
    8. for ($num=0; $num<$rows; $num++){
    9.         $id = $res[$num]['id'];
    10. print 'n='.$num.'id='.$id.'</br>';
    11. }
    Подскажите в чем может быть дело.
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.321
    Адрес:
    Лень
    вот тут надо научиться тебе логично понимать ошибку. На какую строку указывает ошибка ?
    --- Добавлено ---
    и еще пример:

    PHP:
    1. $res = mysqli_fetch_all($result, MYSQLI_ASSOC);
    2. print_r( $res );
     
  8. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.321
    Адрес:
    Лень
    окай перед циклом фор пропишите:
    PHP:
    1. printf ( 'кол-во строк: %d<br>ROWS: %d', count ( $res ), $rows );
     
  9. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Количество элементов в массиве я получаю вот так: $rows=count($res). Количество равно 2. Поэтому и должно быть 2 прохождения. Первый проход успешный второй нет. Проверяю я наличие в массиве переменных через print_r ($res); И получаю что да массив с данным вторым ключом [id] есть и значение в нем есть:
    Код (Text):
    1. Array ( [0] => Array ( [id] => 2 ) [1] => Array ( [id] => 1 ) )
     
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.745
    Симпатии:
    1.321
    Адрес:
    Лень
    ошибки нету, если ты конечно count не забыл
    PHP:
    1. <?php # php version 7.2
    2.  
    3. error_reporting ( E_ALL );
    4.  
    5. $res = [
    6.     0=>['id'=>2],
    7.     1=>['id'=>1]
    8. ];
    9.  
    10. $rows = count($res);
    11.  
    12. for ($num=0; $num<$rows; $num++){
    13.         $id = $res[$num]['id'];
    14. print 'n='.$num.'id='.$id.'</br>';
    15. }
    ознакомься с циклом foreach
     
  11. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Написал пока тогда вот так:
    Код (Text):
    1. PHP Version 7.0.15
    2. $rows=mysqli_num_rows($result);
    3. while ($row = mysqli_fetch_assoc($result)) {
    4.     $id =$row["id"];
    5.     $idk =$row["id_komp"];
    6.     $idv =$row["id_vak"];
    7.     };
    Но хотелось бы чтобы тот код работал. Причем ошибку он выдал у таблицы что частично заполнена у остальных ошибку не выдал я туда еще данные не заносил. Занесу и офигею. Вот эту переменную $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);
    И опять идет запрос того же характера. Правда если я делаю несколько запросов в одной функции то линк доступа я получаю вначале функции и закрываю его в конце. Может в этом дело. Раньше то я один раз подключился к БД выполнил все функции и в конце мог закрыть. А тут раз постоянно надо линк прописывать то я его закрываю сразу же как использовал в функции.
     
  12. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    MouseZver подскажи пожалуйста просто сейчас читаю всякого рода статьи взаимодействия php7 и mysqli и обнаружил вот какой код
    Код (Text):
    1. /* Освобождаем используемую память */
    2.     mysqli_free_result($result);
    После вызова запроса вот эту команду используют. Может из-за этого у меня возникла проблема? Я данную команду не использовал просто закрывал соединение.