Я что-то упускаю в использовании PDO PHP?

#php #database #pdo

#php #База данных #pdo

Вопрос:

Вот простой фрагмент кода, который я пишу:

 class LessonsLearntServiceTyped
{
    private $username = "***********";
    private $password = "***********";
    private $dsn      = "mysql:dbname=lessonslearnt;host=****
******.db.******.hostedresource.com";
    private $dbh;


    public function __construct(){
        try{
            $dbh = new PDO($this->dsn, $this->username, $this->password);

        }catch(PDOException $e){
            echo "Connection failed: ".$e->getMessage();
        }
    }



     public function returnAllEntries(){
        $query = "select * from lessons_learnt order by id";

    }

}
  

ОК. У меня раньше не было большого опыта работы с PDO, но я видел несколько примеров в сети, и, по-видимому, вы не можете сериализовать или десериализовать объект PDO. (это сообщение об ошибке, которое я получаю, когда пытаюсь присвоить объекту PDO значение переменной экземпляра, чтобы я мог использовать его позже)

Хорошо, если мы не можем использовать объекты PDO в качестве переменных экземпляра, как тогда я перейду к написанию returnAllEntries() метода? Придется ли мне снова создавать объект PDO, чтобы я мог использовать его там??(а также новый объект PDO для каждой функции, которую я пишу, которая имеет дело с базой данных)?

Чего я здесь не понимаю?

Заранее всем вам спасибо

Редактировать

$this->dbh = new PDO($this->dsn, $this->username, $this->password); это то, что я хотел сделать.

Но когда я это делаю, я получаю следующее сообщение об ошибке:обратите внимание, что это сообщение об ошибке приходит из консоли PHPUnit, которую я использую для настройки этого класса. В браузере он не показывает никаких ошибок.

«»Вы не можете сериализовать или несериализовать экземпляры PDO»

Комментарии:

1. Зачем вам вообще сериализовать это?

2. Видите ли, если у меня есть несколько функций, и каждая из них выполняет разные функции в базе данных, я хотел бы иметь возможность использовать только один объект PDO для всех из них, и единственный способ, который я вижу для этого, — присвоить объекту PDO значение переменной экземпляра, чтобы я всегда мог получить к нему доступ, написав $this->dbh или что-то подобное.

3. Итак, подождите, вы просто пытались назначить свой PDO-объект $this->dbh , или вы на самом деле вызывали serialize() ?

4. Точно! Я думал, это ясно из моего фрагмента. Я всего лишь пытаюсь присвоить объект PDO переменной экземпляра! Но я получаю сообщение об ошибке «невозможно сериализовать объект PDO»

5. Фактическое сообщение об ошибке будет отображать другую строку для источника ошибки. fabien.potencier.org/article/9 /…

Ответ №1:

Похоже, что это очень, очень странный пограничный случай с исключениями из чтения этого:

http://fabien.potencier.org/article/9/php-serialization-stack-traces-and-exceptions

Попробуйте удалить $e->getMessage() бит строки в вашем операторе catch и посмотрите, меняет ли это что-нибудь.

Ответ №2:

Я думаю, проблема была в моем экземпляре тестового запуска PHPUnit.