mysql_connect vs mysqli_connect

时间:2012-08-29 22:28:58

标签: php mysql database

我在尝试使用mysqli_connect方面遇到一些问题,就像我使用mysql_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 STATEMENT

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; 
    }
}

CLASS 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执行我的查询,我已经测试了从连接类返回对象,但这意味着更多的代码我发现冗余......有更优雅的方法吗?

3 个答案:

答案 0 :(得分:3)

mysql_connect创建您依赖的全局连接。这已经不够优雅了。如果您将连接视为对象实例,那么您将拥有更多控制权(特别是如果您需要同时维护多个连接) - 这是mysqli迫使您做的事情。

这也不是多余的......很明显。

答案 1 :(得分: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;
  }
}

我在我的示例中包含了面向对象的语法。因为你无论如何都在使用物体,你可能会相处它。

答案 2 :(得分:-2)

Mysqli_connect是较新版本的mysql库。

我在mysqli中代表改进。

Mysqli几乎没有引入任何东西。

他们是,

1.准备好的陈述。 2.面向对象的接口。 3.支持多个语句。 4.嵌入式服务器支持。