3

mysql_connectを使用するのと同じ方法でmysqli_connectを使用しようとすると少し問題が発生します

これは私のコードの例です:

QUERY.PHP

class classQuery{
  public function __construct(){
    require('conex/classConex.php');
    require('conex/statement/classStatement.php');
    $this->ObjConex = new classConex;
    $this->ObjStatement = new classStatement;
  }
  public function Query($email){
    $this->ObjConex->Conex();
    $query='SELECT user_email from table where email='.mysql_real_escape_string($email).'';
    $consulta = $this->ObjStatement->Select($query);
    return $consulta;
  }

クラスステートメント

class classStatement{
  public function __construct(){
    $this->ObjConex = new classConex;
  }
    public function Select($query){
      $query_execute = mysql_query($query);
      while($row = mysql_fetch_row($query_execute)){
         $consulta=htmlentities($row[0]);
      }
      return $consulta; 
    }
}

クラスCONEX

class classConex{
  public function Conex(){
    require ('conex.php');
    mysql_connect ($server,$dbuser,$dbpasswd) or die('Error de Conexión');
    mysql_select_db($dbname);
  }
}

さて、今私はmysql_connectの代わりにmysqli_connectを使用したいのですが、phpマニュアルによると、私の新しい接続クラスは次のようになります。

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');

接続がオブジェクトになったので、ClassStatementからクエリを実行するのと同じ方法で実行することはできません。接続クラスからオブジェクトを返すことをテストしましたが、冗長であると思われるコードが増えることを意味します...これを行うためのよりエレガントな方法はありますか?

4

3 に答える 3

3

mysql_connect依存しているグローバル接続を作成します。これはすでにエレガントではありません。接続をオブジェクトインスタンスとして扱うと(特に複数の接続を同時に維持する必要がある場合)、より多くの制御が可能になります。これにより、mysqli強制的に実行されます。

それも冗長ではありません..それはただ明らかです。

于 2012-08-29T22:42:19.950 に答える
2

このようにクラスを構成するのはどうですか。

class Database {

  public function __construct ( $server, $dbuser, $dbpasswd, $dbname ) {
    $this->dbhandle = new mysqli($server, $dbuser, $dbpasswd, $dbname);
  }

  public function Select ($query) {
    $result = $this->dbhandle->query($query);

    while ( $row = $result->fetch_row() ){
      // Whatever you're doing here...
      //$consulta = htmlentities($row[0]);
    }

    return $consulta; 
  }

}

したがって、次のコードで使用できます。

class Query{
  public function __construct(){
    require('conex/classDatabase.php');

    $this->Database = new Database($host, $user, $pass, $dbname);
  }

  public function Query ($email) {
    $query = "SELECT user_email from table where email='".mysql_real_escape_string($email)."'";
    $consulta = $this->Database->Select($query);
    return $consulta;
  }
}

私の例には、オブジェクト指向の構文が含まれています。とにかくオブジェクトを使用しているので、おそらくそれでうまくいくでしょう。

于 2012-08-29T22:43:48.860 に答える
-2

Mysqli_connectは、mysqlライブラリの新しいバージョンです。

ここで私はmysqliで改善の略です。

Mysqliで導入されたものはほとんどありません。

彼らです、

1.プリペアドステートメント。2.オブジェクト指向インターフェース。3.複数のステートメントのサポート。4.組み込みサーバーのサポート。

于 2017-06-25T05:38:17.363 に答える