Работа с объектом PDO - MySQL - PullRequest
       2

Работа с объектом PDO - MySQL

1 голос
/ 27 февраля 2011

Я новичок в PDO и у меня довольно простой вопрос.У меня есть простая функция для подключения к БД:

function connectDB()
    {
        try {
            $dbh = new PDO('mysql:host='.Config::$db_server.';dbname='.Config::$db_name, Config::$db_login, Config::$db_password, array(
                PDO::ATTR_PERSISTENT => true
            ));
            $dbh->exec("SET CHARACTER SET utf8"); 
            $dbh = null;
        } catch (PDOException $e) {
            print "Error!: " . $e->getMessage() . "<br/>";
            die();
        }
    }

После вызова этой функции я успешно подключился к БД.Позже, когда я пытался отправить запрос с помощью $ dbh-> query, я получил «Вызов функции-члена query () для необъекта».Я понимаю это - у меня нет экземпляра класса в данный момент.Но единственная мысль для достижения этой цели - снова использовать $ dbh = new PDO («настройки»), что глупо, не так ли?Функция не имеет смысла чем.Я пытался вернуть $ dbh в функцию connectDB (до оператора NULL), но он не работал на самом деле.

Как это должно быть сделано правильно?

Ответы [ 2 ]

1 голос
/ 27 февраля 2011

Это зависит от архитектуры вашего приложения, но я считаю, что вы должны настроить базу данных для обработки переменной класса, инициализировать ее в конструкторе и использовать позже.

0 голосов
/ 27 февраля 2011

Вам нужно удалить предложение $dbh = null; в вашей функции. В этом предложении вы перезаписываете соединение нулевым значением, поэтому в любое время позже вы делаете $dbh->query(), это все равно, что делать null->query(), и появляется ошибка.

Кроме того, вам нужно сохранить обработчик, иначе он потеряется после того, как ваш код выйдет из этой функции. Добавьте return $dbh; в конце вашей функции или оберните его в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...