PDO en PHP
Quote:
Warning: PDO::prepare() [pdo.prepare]: SQLSTATE[00000]: No error: PDO constructor was not called in 'class.Core.php' on line 9
Gewijzigd op 30/06/2011 17:20:36 door PHP Scripter
Gewijzigd op 30/06/2011 17:20:59 door PHP Scripter
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
class Database extends PDO
{
public $dbConnect;
public function __construct(PDO $dbConnect)
{
$IniFile = parse_ini_file("../config.ini");
try
{
if ($IniFile == true)
{
$Database["Hostname"] = $IniFile["Hostname"];
$Database["Username"] = $IniFile["Username"];
$Database["Password"] = $IniFile["Password"];
$Database["Dataname"] = $IniFile["Dataname"];
}
else
{
throw new Exception ("Unable to load ini file");
}
}
catch (Exception $e)
{
new ExceptionHandler($e);
}
$this->dbConnect = $dbConnect;
$this->dbConnect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if ($this->dbConnect->getAttribute(PDO::ATTR_DRIVER_NAME))
{
$this->dbConnect->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this->dbConnect->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
}
}
}
global $Database;
$PDO = new PDO('mysql:host=' . $Database["Hostname"] . ';dbname=' . $Database["Dataname"], $Database["Username"], $Database["Password"]);
$oDatabase = new Database($PDO);
?>
class Database extends PDO
{
public $dbConnect;
public function __construct(PDO $dbConnect)
{
$IniFile = parse_ini_file("../config.ini");
try
{
if ($IniFile == true)
{
$Database["Hostname"] = $IniFile["Hostname"];
$Database["Username"] = $IniFile["Username"];
$Database["Password"] = $IniFile["Password"];
$Database["Dataname"] = $IniFile["Dataname"];
}
else
{
throw new Exception ("Unable to load ini file");
}
}
catch (Exception $e)
{
new ExceptionHandler($e);
}
$this->dbConnect = $dbConnect;
$this->dbConnect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if ($this->dbConnect->getAttribute(PDO::ATTR_DRIVER_NAME))
{
$this->dbConnect->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this->dbConnect->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
}
}
}
global $Database;
$PDO = new PDO('mysql:host=' . $Database["Hostname"] . ';dbname=' . $Database["Dataname"], $Database["Username"], $Database["Password"]);
$oDatabase = new Database($PDO);
?>
Maar nu wil hij helemaal geen verbinding meer leggen met de database. Ik heb het idee dat hij niet eens de constructor van de Database klasse uitvoert.
Code (php)
1
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'apache'@'localhost' (using password: NO)'
Gewijzigd op 30/06/2011 17:36:36 door PHP Scripter
Je class Database extend PDO. Dat hoeft niet.
Maar je kan zo 1 2 3 ook niet achterhalen waarom ik mijn $Database variablen niet buiten die function kan krijgen?
de scope van die variabelen. Ze bestaan alleen binnen de functie.
Maar dit klopt niet. Je moet eerst de constructor van Database hebben gehad voordat je die $database variabelen weet. Maar om de constructor van Database aan te roepen moet je hem een instantie van PDO meegeven. En om die instantie te kunnen maken zodat je hem kan meegeven heb je die $database variabelen nodig.
Dat komt door Maar dit klopt niet. Je moet eerst de constructor van Database hebben gehad voordat je die $database variabelen weet. Maar om de constructor van Database aan te roepen moet je hem een instantie van PDO meegeven. En om die instantie te kunnen maken zodat je hem kan meegeven heb je die $database variabelen nodig.
Gewijzigd op 01/07/2011 21:37:51 door PHP Scripter
Spamkickslotje