PDO class problemer
Hej gutter ^__^Jeg har siddet og leget lidt med noget PHP i nogle dage.
Målet var at skrive 2 classer til at starte med.
db.php
------
Skal indeholde selve connect delen
db_query.php
------------
skal indeholde query delen
Ved ikke engang om dette er den bedste måde at gøre det på, så hvis der er kommentare til forbedringer, så slå dig endelig løs.
Her er min kode:
db.php filen
----------------------------------------
----------------------------------------
class db {
// host, username, password, database name variables
private $db_host;
private $db_username;
private $db_password;
private $db_database_name;
// the connection variabel
private $dbh;
// constructor
public function __construct($host, $user, $pass, $db_name) {
// provide the connection data to the variables
$this->db_host = $host;
$this->db_username = $user;
$this->db_password = $pass;
$this->db_database_name = $db_name;
// call the connection function
$this->PDO_Connect();
// return the connection
return $this->dbh;
}
// destructor
public function __destruct() {
// close the connection
$this->dbh = NULL;
}
// the connect function
public function PDO_Connect() {
try {
// create the PDO object
$this->dbh = new PDO("mysql:host=$this->db_host;dbname=$this->db_database_name", $this->db_username, $this->db_password);
// set the error reporting attribute
$this->dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch(PDOException $e) {
// logs the error if there is one
$this->PDO_log_error($e);
}
}
// returns this functions to other classes
public function PDO_query($sql) {
return $this->dbh->query($sql);
}
// returns this functions to other classes
public function PDO_prepare($sql) {
return $this->dbh->prepare($sql);
}
// en xtra close functions. use it if needed.
private function PDO_Close() {
// close the connection
$this->dbh = NULL;
}
// error functions, logs errors in a standard txt file.
private function PDO_log_error($e) {
// change time zone to denmark
date_default_timezone_set('Europe/Copenhagen');
// log the error
file_put_contents('error_logs/PDOErrors.txt', "Connection error ### ".date("j-F-Y G:i:s"). " : ".$e->getMessage()."\r\n", FILE_APPEND);
}
}
db_query.php filen
----------------------------------
----------------------------------
class db_query {
// the connection variabel
private static $dbh;
// constructor
public function __construct($connection) {
$this->dbh = $connection;
}
// destructor
public function __destruct() {
}
public function query($sql, array $variables = array()) {
try {
$statement = $this->dbh->PDO_prepare($sql);
$statement->execute($variables);
$data = $statement->fetchAll(PDO::FETCH_ASSOC);
return $data;
} catch(PDOException $e) {
// logs the error if there is one
$this->PDO_log_error($e);
}
}
// error functions, logs errors in a standard txt file.
private function PDO_log_error($e) {
// change time zone to denmark
date_default_timezone_set('Europe/Copenhagen');
// log the error
file_put_contents('error_logs/PDOErrors.txt', "Query error ### ".date("j-F-Y G:i:s"). " : ".$e->getMessage()."\r\n", FILE_APPEND);
}
}
Tests:
-----------
include("db.php");
$pdo = new db("localhost", "root", "", "contacts");
$query = new db_query($pdo);
$result = $query->query("SELECT * FROM persons WHERE id=?", array(1));
foreach($result as $row) {
echo $row["fname"]. "<br />";
}
Ok, så det virker også. ^__^
Men der er nogle ting som jeg er lidt forvirret over. Det tog mig meget lang tid at finde af at jeg skulle oprette den funtion som jeg ville benytte i db.php. F.eks.
$statement = $this->dbh->PDO_prepare($sql);
Denne PDO_prepare() er i db.php, og jeg gør helt sikkert noget forkert her.
Jeg prøvede på at instansere min db_query class og benytte allerede forbindelse fra db.php.
Giver det mening?
Gør jeg noget galt?
Er der nogle forslag til, idéer eller forbedringer?
har læst rigtigt meget og er med på at ændre hvad som helst.
tak alle sammen
^__^