Писал когда-то скрипт в котором была функция с запросом к БД. Теперь пытаюсь переписать этот скрипт под 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']; } Тоже отрабатывает нормально. Как нужно писать чтобы использовать функцию?
Оформи нормально код. --- Добавлено --- в PDO не нужен этот цикл while ($row = $result_name->fetch()) { Сделай так PHP: $sql = "SELECT ID, name FROM myTable'"; $query = $pdo_connect->query($sql); return $query->fetchAll(); --- Добавлено --- потому что функция не видит, то что за ней, используй global
Дно - синтаксис Дно - $pdo_connect равен null @Dimon2x, смотри магию: Он делает ключи по соответствию нумерования таблицы, это раз. Второе, у нас есть замечательный инструмент fetchAll(PDO::FETCH_KEY_PAIR);
требователен к количеству колонок в запросе - их должно быть строго две. Применительно к запросу, конечно это подойдет. Я предпочитаю PDO::FETCH_ASSOC
@Зингер, а различаешь разницу между стилем вывода FETCH_KEY_PAIR и FETCH_ASSOC, что за бред в предпочтениях ? об этом и речи не должно идти.