1

ねえ、ばかげた質問でごめんなさい。私はphpでoopについてたくさん読んだので、試してみることにしました。手続き型phpを実行しているブログがあり、すべて正常に動作しますが、コードにmysqliではなくmysqlがあり、新しいmysqliにアップグレードすることにしました。ここでの問題は、データベースにクエリを実行して結果を取得することです。私は今2日間問題に取り組んでいます。ここに私が実装したいもののコード例があります。

class myDB extends mysqli
{
  //perform mysqli connection to host here and return  $connection_handle
}

class siteConfig
{
   private function getConfig($id)
  {
   $res = $connection_handle->query("SELECT * from config where id='1'");
   $row = $res->fetch_assoc();
   return $row['option'];
  }

}

メインインデックスファイルでこれを行います

$c = new siteConfig();
echo $c->getConfig(1);
//and this will return the result of the query.

また、私のプログラミング ロジックを許してください。

どんなアイデアも役に立ちます。

PS

これは、使用しているコードの実例です

$db_link = mysqli_connect(DB,HOST,DB_USER,DB,PASS,DB_NAME) or die(mysql_error());

class myDB extends mysqli
{
  public function getConfig($id, $db_link) // thanks cbuckley
{
 $db_link = $this->db_link;
     $res = mysqli_query($this->db_link,"SELECT * from config where id='1'");
     $row = mysqli_fetch_array($res);
     return $row['option'];
}    
}

私はすでに定数を定義しており、接続は成功していますが、選択が機能していません。インデックス ページでは、[コード] include('inc/dbc.php'); となります。

 $db = new MyDB();
 echo $db->getConfig(1, $db_link);  

不足している場所を教えてください。可能であれば、必要に応じてコードをリファクタリングしてください

4

2 に答える 2

2

データベース接続とビジネスロジックを分離しておくのは良いことなので、あなたの例は良いです。アプリケーション ロジックがデータベース ハンドラーにアクセスする方法など、整理が必要な追加事項がいくつかあります。次に例を示します。

class MyDB extends mysqli {
    // any custom DB stuff here
}

class SiteConfig {
    protected $db;

    public function __construct(MyDB $db) {
        $this->db = $db;
    }

    public function getConfig($id) {
        $statement = $this->db->prepare('SELECT * FROM config WHERE id = ?');
        $statement->bind_param('i', $id);

        if ($statement->execute()) {
            $row = $statement->get_result()->fetch_assoc();
            return $row['option'];
        }
    }
}

$db = new MyDB('host', 'user', 'password', 'db');
$config = new SiteConfig($db);
var_dump($config->getConfig(1));

ここで興味深い点がいくつかあります。

于 2012-09-19T10:17:16.083 に答える
2

mysqli クラスを拡張して関数を myDB に追加しないのはなぜですか?

class myDB extends mysqli
{
   public function getConfig($id) // thanks cbuckley
  {
   $res = $this->query("SELECT * from config where id='1'");
   $row = $res->fetch_assoc();
   return $row['option'];
  }    
}

$db = new myDB;
$db->getConfig($id);

$this キーワードを使用して myDb 内の任意の mysqli 関数を呼び出すことができます (これはそれ自体を参照し、「それ自体」は mysqli を拡張するため、mysqli が持つすべての関数 + 追加した関数を持つことになります)

于 2012-09-19T09:13:51.077 に答える