Ik doe regelmatig stukjes script die vergelijkbaar zijn aan dit:

<?php
    $sql = "SELECT * FROM tabel";
    $resultaat = mysqli_query($connectie, $sql);
    $records = array();
    while ($row = mysqli_fetch_assoc($resultaat))
    {
        $records[] = $row;
    }
    return $records;
?>

Nu vraag ik me af is hier geen mooie ingeboude functie in PHP voor.

edit: Wat is dat nu weer, geen herking voor mysqli functies op deze site, Bas op de todo voor de nieuwe versie.
uhmm normaal zet je alles wat je uit je loop haalt gelijk in output...
<php
while ($row = mysqli_fetch_assoc($resultaat))
{
echo $bla;
}
?>

voorderest is er denk niets anders dan het zo te doen als je nu doet
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;
		}
	}
?>

Voorbeeld van toepassing:

1) boven in je PHP file:

<?php
        require 'class.core.php';
        require 'class.database.php';
?>

2) query uitvoeren en fetchen

<?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
        }
    }
?>

3) onderin je pagina:

<?php
    if ($db->has_errs ()) {
        echo '<div class="errs">';
        foreach ($db->get_errs () as $err) {
            echo $err;
        }
        echo '</div>';
    }
?>

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.
je kan in je database class ook nog een extra functie maken:


<?php
function fetchAll() {
    $buffer = array();    
    while($row = $this->fetch()) {
        $buffer[] = $row;
    }
    return $buffer;
}
?>


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
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.

@Rik
Ik gebruik als mysqli

@Michael
Nee in een class doe je geen output
@ jurgen: zo:

<?php
    require 'class.core.php';
    require 'class.database.php';
    
    $db = new database ();
    echo $db->get_ip ();
?>

Reageren