Ich habe eine schnelle PHP-Klasse geschrieben, um den Zugriff auf eine MySQL-Datenbank zu erleichtern. Die Klasse funktioniert ok und hat eine query() -Methode, die die Verbindung öffnet, die Abfrage ausführt und dann die Verbindung schließt (ich weiß, dass die Verbindung nach Abschluss des Skripts von PHP selbst geschlossen werden soll, aber ich mag es nicht sich sehr darauf verlassen).Ist diese PHP-Klasse für den MySQL-Datenbankzugriff optimiert?
Aus Performance-Sicht, weiß ich, dass immer eine Verbindung zu einer Datenbank jedes Mal, wenn ich eine Abfrage ausführen, eine sehr gute Praxis ist (und auch wenn ich mysql_real_escape_string() verwenden, um Eingang zu filtern, tut es nicht Funktioniert nicht, da keine aktive Datenbankverbindung besteht. Aber ich möchte darüber mehr geklärt werden. Ist es sehr falsch zu tun? Warum? Und ich würde auch gerne über gute Alternativen wissen.
Hier ist die Klasse:
class DB {
private $conn;
//database data
private $dbhost;
private $dbname;
private $dbuser;
private $dbpass;
/**
* Constructor
* @dbhost string the database host
* @dbname string the database name
* @dbuser string the database username
* @dbpass string the database password
*/
public function __construct ($dbhost, $dbname, $dbuser, $dbpass)
{
$this->dbhost = $dbhost;
$this->dbname = $dbname;
$this->dbuser = $dbuser;
$this->dbpass = $dbpass;
}
/**
* Connects to mysql database
*/
private function open()
{
$this->conn = mysql_connect ($this->dbhost, $this->dbuser, $this->dbpass)
or die ("Error connecting to database");
mysql_select_db ($this->dbname) or die ("Error selecting database");
}
/**
* Closes the connection to a database
*/
private function close()
{
mysql_close($this->conn);
}
/**
* Executes a given query string
* @param string $query the query to execute
* @return mixed the result object on success, False otherwise
*/
public function query ($query)
{
$this->open();
$result = mysql_query($query, $this->conn)
or die ("Error executing query ".$query." ".mysql_error());
$this->close();
return $result;
}
}
Warum brauchen Sie diese Klasse überhaupt? Es scheint nichts zu den Standardfunktionen hinzuzufügen. Und wenn überhaupt, sollten Sie PDO oder mysqli, nicht mysql_ * Funktionen verwenden. –
Und auch: "Ist es sehr falsch zu tun?" Wenn das in Bezug auf Sie nicht mysql_real_escape_string() verwendet, ja, es ist sehr sehr sehr falsch. Aber noch einmal, mysqli oder PDO parametrisierte Abfragen wären eine viel bessere Lösung. –
Nein, es ging nicht um mysql_real_escape_string(), das ist wichtig. Es ging darum, die Verbindung jedes Mal zu öffnen, wenn ich die DB abfrage. Die Klasse selbst fügt nichts Funktionsfähiges hinzu, sondern eine Abstraktionsebene zur Datenbank, anstatt den Code mit wiederholten Funktionsaufrufen und Fehlerbehandlung zu verschmutzen. – rogeriopvl