私はmysqlデータベースへのアクセスを容易にするための簡単なPHPクラスを書いています。クラスは正常に動作し、接続を開き、クエリを実行して接続を閉じるquery()メソッドを持っています(スクリプト終了後に接続がPHP自体で終了するはずですが、気に入らないそれに非常に頼っている)。このPHPクラスはmysqlデータベースアクセス用に最適化されていますか?
パフォーマンスの観点からは、クエリを実行するたびに常にデータベースへの接続を開くことは非常に良い方法ではないことがあります。また、入力をフィルタするためにmysql_real_escape_string()を使用しようとすると、アクティブなデータベース接続がないため、作業しません)。しかし、私はこれについてもっと明確にしたいと思います。それは非常に間違っていますか?どうして?そして、私はまた、これに対する良い選択肢について知りたいと思います。ここで
クラスです:
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;
}
}
なぜこのクラスが最初に必要なのでしょうか?標準機能に何も追加していないようです。そしてもしあれば、あなたはmysql_ *関数ではなく、PDOかmysqliを使うべきです。 –
また、「それは非常に間違っていますか?」それがmysql_real_escape_string()を使用していないことを参照している場合は、非常に間違っています。しかし、やはりmysqliやPDOでパラメータ化されたクエリがはるかに良い解決策になるでしょう。 –
いいえ、それはmysql_real_escape_string()の使用ではありませんでした。私はDBに問い合わせるたびに接続を開くことでした。クラス自体は、関数呼び出しとエラー処理を繰り返すことでコードを汚染するのではなく、機能的なものを追加するのではなく、データベースの抽象レイヤーを追加します。 – rogeriopvl