Выборка из БД

Тема в разделе "OpenCart", создана пользователем cherkas, 13 апр 2019.

  1. cherkas

    cherkas

    Регистрация:
    25 фев 2013
    Сообщения:
    451
    Симпатии:
    57
    Есть список артикулов, я получаю id этих товаров из БД, но есть артикулы которых нету в БД

    если $sku[0] в БД не находит то ошибка и остановка работы скрипта

    пишу код
    PHP:
    $query='SELECT `product_id` FROM `' DB_PREFIX 'product` WHERE `sku`="'.$sku[0].'"';
            
    $result mysqli_query($link$query);
                    while (
    $row $result->fetch_array()) {
                    
    $urlsirius$row['product_id'];
                    } 

    как обойти это?
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Просто проверять, что пришло в результате запроса.
    PHP:
    if(is_array($result)){

    }
    Возможно, вместо is_array нужно is_object, не уверен, что там изначально приходит.

    Но такой вопрос: какого чёрта вы в ОК напрямую вызываете mysqli_query? В ОК есть свои инструменты для роботы с БД, которые уже под капотом всё это проверяют и возвращают массив.
     
    cherkas нравится это.
  3. cherkas

    cherkas

    Регистрация:
    25 фев 2013
    Сообщения:
    451
    Симпатии:
    57
    а нет случайно способа получить одно значение из БД без последующего разбора через цикл?

    т.е. скажем мне нужно получить наименование товара по product_id

    примерно так что бы было

    PHP:
    $query='SELECT `name` FROM `' DB_PREFIX 'product_description` WHERE `product_id`="'.$id.'"';
            
    $name что-тоmysqli_query($link$query) );
    и в $name сразу наименование товара
    ну или хотя бы в $name[0]
     
    Последнее редактирование: 14 апр 2019
  4. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    PHP:
    $result $this->db->query($query);
    $name $result->row['name'];
    Но то, что результат не пустой проверить всё равно надо.
     
    cherkas нравится это.
  5. cherkas

    cherkas

    Регистрация:
    25 фев 2013
    Сообщения:
    451
    Симпатии:
    57

    наверное это немного не то, так как я пишу не в контроллере а отдельным скриптом, и мне нужно подключаться к БД

    т.е.

    PHP:
    include ('config.php');

    $link mysqli_connect(DB_HOSTNAMEDB_USERNAMEDB_PASSWORDDB_DATABASE);

    $query='...';
            
    $result mysqli_query($link$query);
    ____________________________________________________________________________
    кажется я догнал ))
    PHP:
    ...
    $result mysqli_query($link$query);
    if(
    is_array($result)){
    $name $result->row['name'];
    }
     
    Последнее редактирование: 14 апр 2019
  6. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Подключите туда опенкартовский класс для работы с БД.

    А вообще, зачем отдельным скриптом? Всё можно решить через модули и модуль может состоять просто из одного контроллера и без админки - к нему уже можно будет обращаться и при этом иметь доступ ко всем возможностям ОК.
     
  7. cherkas

    cherkas

    Регистрация:
    25 фев 2013
    Сообщения:
    451
    Симпатии:
    57

    отдельно, потому, что нужен крон, проще отделить скрипт от опенкарта, чем потом мучиться с подключением крона