3

我在尝试使用 mysqli_connect 时遇到了一些问题,就像我使用 mysql_connect 一样

这将是我的代码示例:

查询.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);
  }
}

好的,现在我想使用 mysqli_connect 而不是 mysql_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 回答