После обновления вопроса (добавления 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!";
И посмотреть, будет ли надпись. Если её нет, проблема с инклюдом.