Почему не передается переменная?
184
29.04, в 10:45
Есть 2 файла. db.php и globals.php. Один содержит в себе глобальные функции, второй параметры и экземпляр класса mysqli. Подключение к базе записывается в переменную $sql. Когда пытаюсь использовать методы mysqli(к примеру, $sql->query) оказывается, что переменная не определена. Хотя в самом начале файла с функциями файл с параметрами базы подключен(include).
Что Я делаю не так?
Код db.php:
<?php

/*
 * Constant
 */
define(DB_HOST, "127.0.0.1");
define(DB_USER, "u000_default");
define(DB_PASS, "pass");
define(DB_NAME, "u000_site_db");

$sql = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($sql->connect_errno) {
    echo "Не удалось подключиться к MySQL: (" . $sql->connect_errno . ") " . $sql->connect_error;
}

Код globals.php:
<?php
include 'db.php';

function tryQuery() {
    var_dump($sql); #Получается NULL.
    $result = $sql->query("SELECT * FROM users");
    var_dump($result); #Получается NULL.
    
    return $result;
}
Ответы (1)
Сортировать по:
  • После обновления вопроса (добавления globals.php) стало всё ясно.

    Есть такая штука, как область видимости, она нужна, чтобы случайно не перетереть что-то.
    Переменные внутри функции должны быть:
    * Переданы в неё, в качестве аргументов
    * Определнены в ней
    * Объявлены, как global
    Побробнее об области видимости тут www.php.net/manual/ru/language.variables.scope.php
    Только не надо писать слово global, пожалуйста!!!! (Это очень плохая практика)
    Лучше всего модифицировать функцию tryQuery , добавив ей $sql в качестве аргумента
    function tryQuery($sql) {
        var_dump($sql); #Получается NULL.
        $result = $sql->query("SELECT * FROM users");
        var_dump($result); #Получается NULL.
        
        return $result;
    }


    А при вызове её - передавать в неё $sql .

    Старый ответ:
    Лучше ещё хотя бы начало globals и то, как ты это запускаешь.
    (Пока всё выглядит нормально)
    Возможно db.php не инклюдится (относительный адрес, например). Попробуй в db.php добавить
    echo "HERE I AM!";
    И посмотреть, будет ли надпись. Если её нет, проблема с инклюдом.
Написать ответ

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы