У меня есть файл func.php, который содержит функцию, которая получает данные моего пользователя:
require_once 'connection.php';
function getUI($username){
$query = "SELECT * FROM usernames WHERE username = ?";
$sth = $pdo->prepare($query);
$sth->bindValue(1, $username);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);
return $result;
}
в моем connection.php у меня есть:
require_once 'details.php';
$pdo = new PDO("mysql:host=" . $dabhost . "; dbname=" . $dabname ."", $dabusern, $dabpassw);
и в details.php у меня есть:
$dabhost = "localhost";
$dabname = "dab1";
$dabusern = "root";
$dabpassw = "root";
И, наконец, у меня есть файл userdetails.php, в котором есть куча HTML-кода и отображаются результаты, которые возвращает функция getUI (). Мне требуется func.php в начале:
require_once ‘folder1 / func.php’;
Мой каталог выглядит так:
rootfolder/userdetails.php
rootfolder/folder1/details.php
rootfolder/folder1/connection.php
rootfolder/folder1/func.php
Проблема в том, что когда я открываю userdetails.php, в моем файле php_error.log появляется ошибка, которая говорит следующее:
PHP Notice: Undefined variable: pdo in /rootfolder/folder1/func.php on line 58
PHP Fatal error: Call to a member function prepare() on null in /rootfolder/folder1/func.php on line 58
Где, если бы я просто поместил весь код в начало моего userdetails.php, он бы работал и вернул ожидаемые результаты. Поэтому что-то не так с тем, как мне требуются файлы / область видимости переменных, я думаю …
Может ли кто-нибудь объяснить мне, что я делаю не так?
Ваша помощь очень ценится!
ОБНОВИТЬ:
Передача моего соединения $ pdo в качестве второго аргумента в функции решила мою проблему, но теперь я не могу получить результат x из моей возвращенной переменной $ return, например:
echo $ result [‘date’];
Это говорит о том, что переменная $ result не определена. Есть идеи, почему это происходит?
Еще раз большое спасибо!
Когда вы объявляете
function getUI($username) {}
$pdo
недоступен, потому что выходит за рамки функции.
Вам нужно будет передать его в качестве дополнительного параметра или найти какой-то другой механизм для получения $pdo
внутри getUI()
,
require_once 'connection.php';
function getUI($username,$pdo){
$result = null ;
$query = "SELECT * FROM usernames WHERE username = ?";
$sth = $pdo->prepare($query);
$sth->bindValue(1, $username);
$sth->execute();
$result = $sth->fetch(PDO::FETCH_ASSOC);
return $result;
}
Замечания : Передайте объект PDO в качестве второго параметра при вызове вышеуказанной функции.