PHP ver gevorderde |
|
Beste,
Het is lang geleden dat ik met php aan het knooien ben geweest, en toch weer is begonnen om wat voor mezelf te maken. Ben even bezig om van MySQL naar MySQLi over te stappen. Aangezien het niet meteen wou lukken, heb ik even een simpel opzetje gemaakt om het te testen of het werkt, dus dit is niet het werkelijke script maar een testkeesje.
File: index.php
Voor een testje wil ik dat de gebruiker met user ID 1 wordt opgehaald uit het database,
via de Users class.
error_reporting (E_ALL);
require ('config.inc.php'); // Wordt tevens connectie met DB gemaakt, zie volgend snippet.
require ('users.class.php');
$clUsers = new Users ();
$clUsers->lastUser (); // Testen wat er gebeurt bij een query
require ('config.inc.php'); // Wordt tevens connectie met DB gemaakt, zie volgend snippet. require ('users.class.php'); $clUsers = new Users (); $clUsers->lastUser (); // Testen wat er gebeurt bij een query
File: Users.class.php
class Users {
public function lastUser () {
global $database;
$sQuery = 'SELECT username FROM users WHERE id = 1';
$qGetUser = Database::query ($sQuery);
}
}
class Users { public function lastUser () { $sQuery = 'SELECT username FROM users WHERE id = 1'; $qGetUser = Database::query ($sQuery); } }
File: config.inc.php
<?PHP
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'testkees';
require ('database.class.php');
$clDatabase = new Database ($host, $username, $password, $database);
?>
<?PHP $host = 'localhost'; $username = 'root'; $password = ''; $database = 'testkees'; require ('database.class.php'); $clDatabase = new Database ($host, $username, $password, $database); ?>
File: database.class.php
Omdat ik een extension wil maken van de standaard MySQLi class, heb ik het volgende:
class Database extends Mysqli {
private $database;
private $result;
public function __construct ($host, $username, $password, $database) {
$this->database = parent::__construct ($host, $username, $password, $database);
if (mysqli_connect_error ()) {
die ('Cannot connect database: ' . mysqli_errno ());
}
}
public function query ($sQuery) {
$this->result = parent::query ($sQuery);
/**
* Hier bij parent::query gaat het fout, ik krijg namelijk de volgende foutmelding:
* Fatal error: Non-static method mysqli::query() cannot be called statically, assuming $this from incompatible
* context in C:\Xampp\xampp\htdocs\e-terhorst\database.class.php on line 18
**/
if (!$this->result) {
die ('Failed to execute query: ' . parent::errno());
}
}
}
class Database extends Mysqli { private $database; private $result; public function __construct ($host, $username, $password, $database) { $this->database = parent::__construct ($host, $username, $password, $database); if (mysqli_connect_error ()) { die ('Cannot connect database: ' . mysqli_errno ()); } } public function query ($sQuery) { $this->result = parent::query ($sQuery); /** * Hier bij parent::query gaat het fout, ik krijg namelijk de volgende foutmelding: * Fatal error: Non-static method mysqli::query() cannot be called statically, assuming $this from incompatible * context in C:\Xampp\xampp\htdocs\e-terhorst\database.class.php on line 18 **/ if (!$this->result) { die ('Failed to execute query: ' . parent ::errno()); } } }
De opbouw zoals ik het heb kan duidelijk niet, want ik krijg:
error schreef: Fatal error: Non-static method mysqli::query() cannot be called statically, assuming $this from incompatible context in C:maphtdocsprobeerdatabase.class.php on line 18
Ik ben al aan het googelen geweest en knutselen met de opbouw, maar ik ga het zo niet fixen. Waarschijnlijk zie ik een OOP gerelateerd structuur fout over het hoofd, maar mocht u het weten... Please help
Mvg, ed!
|