MySQLi deed goed bij versie 5.5/5.6 maar vanaf 7.0/7.1 deed het raar met oproepen van quary.

function __construct($db_host="",$db_naam="",$db_gebruikersnaam="",$db_wachtwoord="") {
global $CFG;
$db_host = $CFG['db']['db_host'];
$db_naam = $CFG['db']['db_naam'];
$db_gebruikersnaam = $CFG['db']['db_gebruikersnaam'];
$db_wachtwoord  = $CFG['db']['db_wachtwoord'];
$this->db_connection($db_host,$db_naam,$db_gebruikersnaam,$db_wachtwoord);
En hoe roep je het geheel aan?
Waarom gebruik je niet de standaard manier?
Op basis van alle stukjes code heb ik dit in elkaar gezet.

Zo te zien krijg ik verbinding met de server :

<?php

class Database {

	function db_connection( $db_host, $db_naam, $db_gebruiker, $db_wachtwoord )
	{
		$conn = mysqli_connect( $db_host, $db_gebruiker, $db_wachtwoord, $db_naam ) or die("Geen verbinding!");
		echo $conn->host_info . '<br />';
		echo '<pre>' . print_r($conn, TRUE ) . '</pre>';
	}

	function __construct($db_host="",$db_naam="",$db_gebruikersnaam="",$db_wachtwoord="")
	{
		global $CFG;
		echo '<pre>' . print_r($CFG, TRUE ) . '</pre>';
		$db_host           = $CFG['db']['db_host'];
		$db_naam           = $CFG['db']['db_naam'];
		$db_gebruikersnaam = $CFG['db']['db_gebruikersnaam'];
	 	$db_wachtwoord     = $CFG['db']['db_wachtwoord'];
		$this->db_connection( $db_host, $db_naam, $db_gebruikersnaam, $db_wachtwoord );
	}
}

$CFG = [
	'db' => [
			'db_host' => 'localhost',
			'db_naam' => 'test',
			'db_gebruikersnaam' => 'gebruiker',
			'db_wachtwoord' => 'repelsteeltje'
		]
];

echo '<pre>' . print_r($CFG, TRUE ) . '</pre>';

$database = new Database();
?>
En wat is nu de uitvoer gezien je een hoop debugged?
Ik debug niks. Ik wil zien wat er heen en weer wordt gestuurd.

Hiero een completere versie :

<?php

class Database {

	private function db_connection( $db_host, $db_naam, $db_gebruiker, $db_wachtwoord )
	{
		$this->conn = mysqli_connect( $db_host, $db_gebruiker, $db_wachtwoord, $db_naam ) or die("Geen verbinding!");
		echo $this->conn->host_info . '<br />';
		echo '<pre>' . print_r($this->conn, TRUE ) . '</pre>';
	}

	public function __construct( $db_host = '', $db_naam = '', $db_gebruikersnaam = '', $db_wachtwoord = '' )
	{
		global $CFG;
		echo '<pre>' . print_r($CFG, TRUE ) . '</pre>';
		$db_host           = $CFG['db']['db_host'];
		$db_naam           = $CFG['db']['db_naam'];
		$db_gebruikersnaam = $CFG['db']['db_gebruikersnaam'];
	 	$db_wachtwoord     = $CFG['db']['db_wachtwoord'];
		$this->db_connection( $db_host, $db_naam, $db_gebruikersnaam, $db_wachtwoord );
	}

	public function getresult( $sql )
	{
		echo $sql . '<br />';
		$result = mysqli_query( $this->conn, $sql );
		if( mysqli_num_rows($result) > 0 )
		{
			return $result;
		}
		else
		{
			return FALSE;
		}
	}
}

$CFG = [
	'db' => [
			'db_host' => 'localhost',
			'db_naam' => 'test',
			'db_gebruikersnaam' => 'gebruiker',
			'db_wachtwoord' => 'repelsteeltje'
		]
];

echo '<pre>' . print_r($CFG, TRUE ) . '</pre>';

$database = new Database();

$result = $database->getresult('SHOW TABLES;');

echo '<pre>' . print_r($result, TRUE ) . '</pre>';

foreach ( $result as $row) {
	echo $row['Tables_in_test'] . '<br />';
}
?>
Ah, ik dacht dat dit de reactie van de Topicstarter was :p

Hopelijk komt hij er nu uit.
Dat is een hoop gesleep met variabelen, kun je niet gewoon de config als parameter meegeven (dependency injection)? En daarbij al het nodeloos kopiëren en doorgeven van variabele(-waarde)n achterwege laten? Dit leidt alleen maar tot wollige foutgevoelige code. Maak je ergens een spellingsfout zoek je je helemaal het leplazerus waar het misgaat.

db_connection() is een rare naam. Je zit al in de database class, en het daadwerkelijke connectie-object zit (uiteindelijk) in $this->conn. Zou het niet veel logischer zijn om deze methode simpelweg connect() te noemen? Want dat is in wezen wat de methode doet.

Reageren