私は PHP オブジェクト指向プログラミングに非常に慣れていないので、作成したデータベース オブジェクトについて良いアドバイスが得られるかどうか疑問に思っていました。
クラスdbを呼び出し、すべてのページ ロードにクラスを含め、データベース オブジェクトを開始しますusing $db = new db
。次に、必要なアクション (データベースからメニューを作成する、ログイン情報を取得するなど) ごとに、目的に応じてさまざまなパラメーターを使用して、この内部のメソッドを呼び出します。
最初のパラメーターは、? を含むクエリとして受け取ります。バインドしたい値の置換としての記号、2 番目のパラメーターは、配列内でバインドする値であり、その後、prepared_statement メソッド内でループされ、3 番目のパラメーターは型です ( FETCH_ARRAY は、SELECT ステートメント行の配列を返します。 NUM_ROWS は影響を受けた行の量を返し、INSERT は最後に挿入された ID を返します)。
この関数を呼び出す方法の例を以下に示します。
$db->prepared_execute( "SELECT * FROM whatever WHERE ? = ? ", array( 'password', 'letmein' ), NUM_ROWS );
2 番目と 3 番目のパラメーターは、バインドするパラメーターがない場合、または戻り値が必要ない場合のオプションです。
私はOOPに慣れていないので、いつ正しく使用するか、パブリック、プライベート、静的関数/変数、およびデザインパターン(シングルトンなど)を正確に把握するのが難しいと感じています。
私はこれまでに多くのチュートリアルを読んできましたが、OOP と私が構築したこのクラスを使用して次にどこに行くべきかについて、さらなる回答やアドバイスを得るために、ここでそれを取る必要があると感じています。
次に追加するエラー処理を除いて、私にとっては良い出発点ですが、ここで明らかな設計エラーを犯していないことを確認したいと思います。
クラスのコードは次のとおりです。
class db {
var $pdo;
public function __construct() {
$this->pdo = new PDO('mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8', DB_USER, DB_PASS);
$this->pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function prepared_execute( $query, $bind_values = null, $type = null ) {
$preparedStatement = $this->pdo->prepare( $query );
if( $bind_values ) {
$i = 1;
foreach( $bind_values as $bind_value ) {
$preparedStatement->bindValue($i, $bind_value);
$i++;
} }
$preparedStatement->execute();
if( $type == FETCH_ARRAY ) { return $preparedStatement->fetchAll(); }
elseif( $type == NUM_ROWS ) { return $preparedStatement->rowCount(); }
elseif( $type == INSERT ) { return $this->pdo->lastInsertId(); }
else{ return true; }
}