Witam,
mam sobie zapoczątkowaną klasę Login.
<?php
include_once("config.php");
class Login
{
var $username;
var $password;
public function __construct()
{
$this->connectToMysql();
if(!isset($_SESSION['auth'])) {
$_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?