Ik ken er geen ingebouwde functie voor, dus ik heb er een setje classes voor geschreven die ook de foutafhandeling doen.
class.core.php
<?php
class core {
protected $errs;
protected $msgs;
/*
* constructor
*/
public function __construct () {
$this->errs = array ();
$this->msgs = array ();
}
/*
* setters
*/
public function set_err ($err) {
array_push ($this->errs, $err);
}
public function set_msg ($msg) {
array_push ($this->msgs, $msg);
}
/*
* getters
*/
public function get_errs () {
return $this->errs;
}
public function get_msgs () {
return $this->msgs;
}
/*
* return the number of messages, if any
* @return int
*/
public function has_msgs () {
return count ($this->msgss);
}
/*
* return the number of errors, if any
* @return int
*/
public function has_errs () {
return count ($this->errs);
}
}
?>
class.database.php
<?php
class database extends core {
private $db_host;
private $db_user;
private $db_pass;
private $db_name;
protected $res;
protected $affected_rows;
protected $num_rows;
public function __construct () {
parent::__construct ();
$this->db_host = '*****';
$this->db_user = '*****';
$this->db_pass = '*****';
$this->db_name = '*****';
if (!mysql_connect ($this->db_host, $this->db_user, $this->db_pass)) {
array_push ($this->errs, '<p>Connectie met DB is mislukt.</p>');
}
if (!mysql_select_db ($this->db_name)) {
array_push ($this->errs, '<p>Fout bij het selecteren van de database</p>');
}
}
public function query ($sql) {
if (!$this->res = mysql_query ($sql)) {
array_push ($this->errs, '<p>' . mysql_errno () . ': ' . mysql_error () . '</p>');
array_push ($this->errs, '<pre>' . htmlentities (str_replace ("\t", '', $sql)) . '</pre>');
return false;
}
else {
return true;
}
}
public function fetch () {
return mysql_fetch_assoc ($this->res);
}
public function get_affected_rows () {
return $this->affected_rows;
}
public function get_num_rows () {
return mysql_num_rows ($this->res);
}
public function get_ip () {
if (@getenv ($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = @getenv ($_SERVER['HTTP_X_FORWARDED_FOR']);
}
elseif (@getenv ($_SERVER['HTTP_CLIENT_IP'])) {
$ip = @getenv ($_SERVER['HTTP_CLIENT_IP']);
}
else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
}
?>
<?php
$db = new database ();
$sql = "
SELECT veld1, veld2
FROM tabelnaam
WHERE veld1 LIKE '%zoekwoord%'
";
if ($db->query ($sql)) {
while ($res = $db->fetch ()) {
// doe iets met $res
}
}
?>
Opmerkingen:
Die membervariabelen om de databasenaam, -wachtwoord en dergelijke te bewaren zouden weg kunnen. Moet ik nog eens doen.
De foutafhandeling kan mooier, met exceptions. Moet ik ook nog eens doen ;-)
Deze opzet is minimaal, maar werkt voor mij prima. Voor beginners in OOP misschien ook leuk om eens te proberen.
Dan krijg je alle gegevens mooi in een array terug.
ps:
Hier heb je gelijk een mooi voorbeeld van een groot voordeel van OOP. Als je straks over wil stappen naar mysqli hoef je alleen maar een andere database class te pakken en al je applicaties waar je hebt gewerkt met een database class werken met mysqli
@jan
Ik heb je class eens geprobeerd, helaas ken ik niet zoveel van classes.
Maar hoe gebruik je deze? ik zie dat je een functie get_ip hebt, hoe gebruik ik deze?
Jurgen
?
Onbekende gebruiker
15-05-2007 13:51
Jammer dat er geen interne functie voor is.
@Jan
Bedankt voor de class maar ik gebruik mysqli al als class dus ik denk dat ik weinig van je class kan 'her'gebruiken.