За последние 24 часа нас посетили 22733 программиста и 1259 роботов. Сейчас ищет 701 программист ...

Переписать функцию с запросом к БД с использованием PDO

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

Метки:
  1. smmik

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

    С нами с:
    9 янв 2016
    Сообщения:
    5
    Симпатии:
    0
    Писал когда-то скрипт в котором была функция с запросом к БД.
    Теперь пытаюсь переписать этот скрипт под PHP7 с использованием PDO. Если раньше все работало то теперь выдает ошибку

    раньше:
    $Linkdb=mysql_connect($host, $user, $pass, $db) ;
    mysql_select_db($db, $Linkdb);

    и сама функция
    function GetArray()
    {
    $resultSQL = mysql_query("SELECT ID, name FROM myTable");
    while ($row = mysql_fetch_assoc($resultSQL))
    { $ArrayName[$row[ID]] = $row[name]; }
    mysql_free_result($resultSQL);
    return $ArrayName;
    }
    И все работало. Теперь пытаюсь написать

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [...];
    $pdo_connect = new PDO($dsn, $user, $pass, $opt);

    и функцию
    function GetArray()
    {
    $result_name = $pdo_connect->query('SELECT ID, name FROM myTable');
    while ($row = $result_name->fetch())
    {
    $ArrayName[$row['ID']] = $row['name'];
    }
    return $ArrayName;
    }
    При этом при вызове функции $ArrayName = GetArray(); получаю ошибку " Uncaught Error: Call to a member function query() on null in...", хотя раньше (до использования PDO) все работало нормально.
    При этом код не обернутый в функцию

    $result_name = $pdo_connect->query('SELECT ID, name FROM myTable');
    while ($row = $result_name->fetch())
    {
    $ArrayName[$row['ID']] = $row['name'];
    }
    Тоже отрабатывает нормально.

    Как нужно писать чтобы использовать функцию?
     
  2. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    Оформи нормально код.
    --- Добавлено ---
    в PDO не нужен этот цикл

    while ($row = $result_name->fetch())
    {

    Сделай так

    PHP:
    1. $sql = "SELECT ID, name FROM myTable'";
    2.         $query = $pdo_connect->query($sql);
    3.         return $query->fetchAll();
    --- Добавлено ---
    потому что функция не видит, то что за ней, используй global
     
  3. smmik

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

    С нами с:
    9 янв 2016
    Сообщения:
    5
    Симпатии:
    0
    Спасибо, попробую.
    А как редактировать сообщение?
     
  4. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.199
    Симпатии:
    184
    @smmik редактировать уже поздно
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    Дно - синтаксис
    Дно - $pdo_connect равен null
    @Dimon2x, смотри магию:
    Он делает ключи по соответствию нумерования таблицы, это раз.
    Второе, у нас есть замечательный инструмент
    fetchAll(PDO::FETCH_KEY_PAIR);
     
  6. Зингер

    Зингер Активный пользователь

    С нами с:
    20 июл 2017
    Сообщения:
    127
    Симпатии:
    7
    требователен к количеству колонок в запросе - их должно быть строго две. Применительно к запросу, конечно это подойдет.
    Я предпочитаю PDO::FETCH_ASSOC
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    @Зингер, а различаешь разницу между стилем вывода FETCH_KEY_PAIR и FETCH_ASSOC, что за бред в предпочтениях ? об этом и речи не должно идти.