mam sobie zapoczątkowaną klasę Login.
<?php include_once("config.php"); class Login { var $username; var $password; public function __construct() { $this->connectToMysql(); { $_SESSION['auth'] = 0; } } public function connectToMysql() { $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'', ''.DB_USER.'', ''.DB_PASS.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); } public function userRegistration($username, $password, $email) { //$this->connectToMysql(); //$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'', ''.DB_USER.'', ''.DB_PASS.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $stmt = $pdo -> prepare('INSERT INTO `users` (`username`, `password`, `email`) VALUES( :username, :password, :email)'); $stmt -> bindValue(':username', $username, PDO::PARAM_STR); $stmt -> bindValue(':password', $password, PDO::PARAM_STR); $stmt -> bindValue(':email', $email, PDO::PARAM_STR); if($registration = $stmt -> execute()) { echo "Użytkownik ".$_POST['username']." został zarejestrowany.<br/><a href='index.php'>Strona główna<a/>"; } } } ?>
Zawiera ona metodę connectToMysql, która wykonywana jest w konstruktorze i działa ok - łączy się z bazą.
Problem pojawia się w chwili rejestracji nowego użytkownika i brzmi tak:
Fatal error: Call to a member function prepare() on a non-object in E:\httpd\rowery\lib\class_login.php on line 28
Ta informacja zbija mnie trochę z tropu, bo przecież obiekt PDO jest tworzony w konstruktorze.
Dodanie w metodzie userRegistration
<?php $this->connectToMysql(); ?>
również nie pomaga, a chyba powinno. Czy czegoś nie rozumiem?
Poprawnie wykonane zapytanie jest tylko w przypadku dodania:
<?php $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.'', ''.DB_USER.'', ''.DB_PASS.'', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); ?>
Moje pytanie brzmi dlaczego utworzony w konstruktorze obiekt PDO nie funkcjonuje w metodach tej klasy i trzeba tworzyć go ponownie?