За последние 24 часа нас посетили 37109 программистов и 7905 роботов. Сейчас ищет 1841 программист ...

Не получается взять данные из массива

Тема в разделе "PHP для новичков", создана пользователем ilya45, 9 фев 2023.

  1. ilya45

    ilya45 Новичок

    С нами с:
    1 янв 2023
    Сообщения:
    86
    Симпатии:
    2
    Друзья я совершил запрос где попытался взять колич строк в которых id=переменной $id.
    уже задрала это конверсия fetch-fetchall и тд.
    Научите нормально адекватно и грамотно выводить данные из массива,который мы взяли запросом из бд пж
    вот сам код
    PHP:
    1. //запрос на колич лайков записи
    2. $like_count = $connect->prepare("SELECT COUNT(*) FROM liked_content WHERE ilan_id=?");
    3. $like_count->execute([$id]);
    4. $like_count = $like_count->fetch(PDO::FETCH_ASSOC);
    5. echo $like_count;
    --- Добавлено ---
    Вот что смог вывести используя
    print_r($like_count);

    Array ( [0] => Array ( [COUNT(*)] => 1 ) )
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    ЧЁ непонятного? Вложенный массив. С тупым ключом. Сделай хотя бы так в запросе: COUNT(*) count ;)
     
  3. Aleksandr.B

    Aleksandr.B Активный пользователь

    С нами с:
    2 фев 2023
    Сообщения:
    159
    Симпатии:
    41
    Адрес:
    Барнаул
    1. Данные int, float, string из массива выводятся по их индексу.
    2. Если нет уверенности, какие данные находятся в переменной, необходимо сделать анализ этой переменной var_dump($like_count)
    у вас будет примерно такой массив:
    PHP:
    1. array(1) { ["count(id)"]=> string(2) "23" }
    Поэтому лучше сделать так:
    PHP:
    1. $like_count = $connect->prepare("SELECT COUNT(*) as `count` FROM liked_content WHERE ilan_id=?");
    2. $like_count->execute([$id]);
    3. $like_count = $like_count->fetch(PDO::FETCH_ASSOC);
    4. var_dump($like_count);
    результат будет:
    PHP:
    1. array(1) { ["count"]=> string(2) "23" }
    затем вывести данный результат
    PHP:
    1. echo $like_count['count'];
    или так
    PHP:
    1. $like_count = $connect->prepare("SELECT COUNT(*) as `count` FROM liked_content WHERE ilan_id=?");
    2. $like_count->execute([$id]);
    3. $like_count = $like_count->fetch(PDO::FETCH_ASSOC);
    4. echo $like_count ? (int)current($like_count) : 0;
     
    #3 Aleksandr.B, 9 фев 2023
    Последнее редактирование: 9 фев 2023
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Хотя какого фига он вложенный, если fetch? :eek:
    --- Добавлено ---
    Какая конверсия? Вы своими «конверсиями» людей с толку сбиваете ;)
    --- Добавлено ---
    Когда выбираешь COUNT(*), в выборке будет только одна запись (с одним «полем»). Нужно использовать fetch:
    PHP:
    1. list($count) = $stm->fetch(...
    Можно даже не переименовывать COUNT(*), но обычно такого непотребства в ключах всегда стараются избегать.
     
    ilya45 нравится это.
  5. ilya45

    ilya45 Новичок

    С нами с:
    1 янв 2023
    Сообщения:
    86
    Симпатии:
    2
    Почему с тупым ключом? Как его сделать умным? )
    --- Добавлено ---
    Я так и сделал.Потом попытался вывести его используя индекс
    PHP:
    1. echo $like_count['1'];
    Но не сработало
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Ответ есть прям в сделанной вами цитате ;)
    Если будет ругаться на count, возьмите в косые кавычки или используйте др. имя.
     
    ilya45 нравится это.
  7. ilya45

    ilya45 Новичок

    С нами с:
    1 янв 2023
    Сообщения:
    86
    Симпатии:
    2
    Это уже чуть по сложнее,тут новые вещи какие то для меня
    --- Добавлено ---
    Он не может найти ключ count выводит ошибку

    array(1) { [0]=> array(1) { ["COUNT(*)"]=> string(1) "1" } }
    Warning: Undefined array key "count" inD:\OSPanel\domains\iscok\ilan incele.phpon line35
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Запрос может сбоить, поэтому fetch может вернуть false. Не можно проверить еще результат execute или просто использовать исключения ;)
    --- Добавлено ---
    Я вам выше писал, что у вас какая-то хрень с вложенным массивом.
    --- Добавлено ---
    И имя count не «проявилось». Походу это вообще какой-то левый результат ;)
     
  9. ilya45

    ilya45 Новичок

    С нами с:
    1 янв 2023
    Сообщения:
    86
    Симпатии:
    2
    Да не,вот код
    PHP:
    1. $like_count = $connect->prepare("SELECTCOUNT(*) FROM liked_content WHERE ilan_id=?");
    2. $like_count->execute([$id]);
    3. $like_count = $like_count->fetchall(PDO::FETCH_ASSOC);
    4. var_dump($like_count);
    5. echo $like_count['count'];
    6. die();
    А вот результат
    array(1) { [0]=> array(1) { ["COUNT(*)"]=> string(1) "1" } }
    Warning: Undefined array key "count" in D:\OSPanel\domains\iscok\ilan incele.php on line 35
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Mля, уже «десять раз» обсудили!

    Будете заниматься махинациями и в этом разделе, тоже перестану помогать ;)
    --- Добавлено ---
    Про отсутствие имени count уже молчу.
     
  11. ilya45

    ilya45 Новичок

    С нами с:
    1 янв 2023
    Сообщения:
    86
    Симпатии:
    2
    Я видел,никаким махинация я не занимаюсь не неси пургу.В моем коде там есть пробеол а тут так получилось я хз,
    PHP:
    1. $like_count = $connect->prepare("SELECT COUNT(*) FROM liked_content WHERE ilan_id=?");
    2. $like_count->execute([$id]);
    3. $like_count = $like_count->fetchall(PDO::FETCH_ASSOC);
    4. var_dump($like_count);
    5. echo $like_count['count'];
    6. die();
    --- Добавлено ---
    Мне не нужно помогать,80% ваших ответов на мои комментарии это хрень какая то,вы пишете что да как исправить,но говорите словно так будто я уже 5 лет в php,я новичок,я не пойму на вашем языке.
    Сверху Aleksandr.B очень даже внятно объяснил и даже показал пример кода.
    Вы написали непонятную для вещь и угрожаете,что не будете помогать,ну это же смешно
    --- Добавлено ---
    Вместо fetchall я прописал просто fetch и массив стал немного красивей что ли:D
    но ошибка не исчезла.
    Данные с ключом 'count' все равное не видит
    вот код
    PHP:
    1. //запрос на колич лайков записи
    2. $like_count = $connect->prepare("SELECT COUNT(*) FROM liked_content WHERE ilan_id=?");
    3. $like_count->execute([$id]);
    4. $like_count = $like_count->fetch(PDO::FETCH_ASSOC);
    5. var_dump($like_count);
    6. echo $like_count['count'];
    7. die();
    А вот ошибка
    array(1) { ["COUNT(*)"]=> string(1) "2" }
    Warning: Undefined array key "count" in D:\OSPanel\domains\is
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Поздравляю. Дошло :D

    Дошло, да не все :D
    --- Добавлено ---
    Если с count никак не доходит, можно использовать мой вариант с list($count) = ;)
     
  13. ilya45

    ilya45 Новичок

    С нами с:
    1 янв 2023
    Сообщения:
    86
    Симпатии:
    2
    Вместо fetchall я прописал просто fetch и массив стал немного красивей что ли:D
    но ошибка не исче
    Да,до меня трудно донести информация на сложно для меня языке,я только изучаю,мне просто надо поменять название ключа в запросе что ли?
    --- Добавлено ---
    Где это юзать вообще в самом запросе вначале что ли или где
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    656
    Выше был более развернутый пример. Только не надо бездумно копипастить $stm ;)
    --- Добавлено ---
    И будем считать, что обработка ошибок уже выполнена. Писал об этом:
     
    ilya45 нравится это.
  15. ilya45

    ilya45 Новичок

    С нами с:
    1 янв 2023
    Сообщения:
    86
    Симпатии:
    2
    вы это имели введу?
    PHP:
    1. //запрос на колич лайков записи
    2. $like_count = $connect->prepare("SELECT COUNT(*) count FROM liked_content WHERE ilan_id=?");
    3. $like_count->execute([$id]);
    4. $like_count = $like_count->fetch(PDO::FETCH_ASSOC);
    --- Добавлено ---
    Помогло это.
    Нужно обращать внимания на запросы тоже(это я себе и новичкам)
    Поставил мишке лаек за исправление ошибки,хоть объясняет на инопрешеленском )
     
  16. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @ilya45, для получения одного значения из выборки (sql-запроса) в PDOStatement есть метод fetchColumn.
    Кроме того, если не желаете прописывать псевдонимы получаемым в запросе значениям - их можно получить по номерам "столбцов" (индексам массива от 0 и далее). Подробнее: PHP: PDOStatement::fetch - Manual (в описании параметра mode)
     
    ilya45 нравится это.