#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.