ОК, я вижу некоторые похожие вопросы для моего, но их примеры все используют классы PHP ... у меня нет. Может, в этом проблема? Мне не нужны классы, потому что мой сайт очень прост в этот момент.Объект PDO не входит в функцию
В любом случае, я пытаюсь использовать PDO для подключения к MySQL db. Я подключаюсь к db fine в файле с именем config.php
и включаю этот файл в index.php
с require_once()
.
Я могу успешно запросить db из другого файла с именем process.php
, но проблема находится внутри функции внутри этого файла; кажется, что мой объект DBO выходит за рамки этой функции.
Вот соответствующие фрагменты кода:
index.php
require_once('./lib/config.php');
config.php
// tested and connects fine
$pdo = new PDO('mysql:host=' . $hostname . ';dbname=' . $dbname, $username, $password, array(
PDO::ATTR_PERSISTENT => true
));
process.php
Кстати, я использую PDO, потому что у меня была схожая проблема с mysqli
, и я стараюсь уйти от mysql
, что, очевидно, обесценивается и обескураживается.
EDIT: Я должен был прояснить первый на основе количества ответов, которые я получил по этому поводу: я действительно пытался удар $ PDO как пары к функции, не повез или изменений в сообщении об ошибке.
РЕШЕНИЕ: ОК, очевидно, проблема заключалась в том, что мне нужно было добавить require_once('config.php')
в файл process.php. Не знаете, почему (не будет ли он уже включен, когда index.php был запущен первым?). Затем я смог успешно передать $pdo
в качестве параметра моей функции и вуаля.
В функции AUTHENTICATE, '$ pdo' выходит за рамки. Передайте его в качестве параметра или объявите его глобальным. – andrewsi
Если вы действительно должны, объявите его как 'global $ pdo;' внутри вашей функции. Вам лучше передать его или поставить 'authenticate' в класс. – Aleph
Используйте соответствующие классы и объекты, а затем используйте инъекцию зависимости. –