【问题标题】:mysql to mysqli classmysql 到 mysqli 类
【发布时间】:2014-10-07 18:34:58
【问题描述】:

我是 php 的新手,我使用扩展名“mysql”,我想更改为改进的类“mysqli”。 这个类在文件“mysqlData.php”中

<?php 
class db {
private $host;
private $user;
private $pass;
private $dbname;
private $connString;
public function __construct(){
    $this->host = 'host';
    $this->user = 'user'; 
    $this->pass = 'pass';
    $this->connString = mysql_connect($this->host, $this->user, $this->pass, true,65536);
}
private function conect_db() {
    $this->dbname = 'database';
    mysql_select_db ($this->dbname, $this->connString);
}
public function query($sql, $debug = 0){
    $val =  0;
    $errMessage = '<div class="error"> Ha ocurrido un error durante la conexion a la Base de Datos<br/> por favor, contacta al Administrador</div>';
    $this->conect_db();
    if ($debug == $val){            
        $result = mysql_query($sql);
        if (!$result){
            $message  = '<br>Problema: <b>' . mysql_error() . "<br>";
            $message .= '</b>En la CONSULTA:<b> ' . $sql . '</b>';
            die($message);
        }
    }
    else
    {
        $result = mysql_query($sql) or die($errMessage);
    }
    return $result;
}
public function fetch_row($result){
    if ($result) return mysql_fetch_row($result);
}
public function fetch_array($result){
    if ($result) return mysql_fetch_array($result);
}
public function num_rows($result){
    if ($result) return mysql_num_rows($result);
}
public function fetch_assoc($result){
    if ($result) return mysql_fetch_assoc($result);
}
}
?> 

我在其他课程中使用它

public function selectid($data1, $data2){
try{
        $db = new db();
        $strSQL = "CALL selectid(".$data1.",".$data2.");";
        $Array = $db->query($strSQL);
        if($db->num_rows($Array)!=0){
            $i = 0;
            while ($list = $db->fetch_array($Array)){
                $id[$i] = $list["id"];
                $i++;
            }
        }
        return array ($id);
        unset($db, $strSQL, $Array, $listArray);
    }catch(Exception $e) {
        echo "Error: ".$e->getMessage(); 
    }
}

以前的类运行良好,但我想替换它使用 MYSQLI 创建一个新类,但这个新类不起作用。 新课程:

class DBi{
private $dbUser;
private $dbPass;
private $dbName;
private $dbHost;
public $dbConn;

public function __construct(){
    $this->dbHost = 'host';
    $this->dbUser = 'user';
    $this->dbPass = 'pass';
    $this->dbName = 'database';
    $this->dbConn =  new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName) or die ('<div> <b>[ERROR #'.mysqli_connect_errno().']</b> 
    <br/> Ha ocurrido un error durante la conexi&oacute;n a la Base de Datos, si este problema persiste favor de contactar al Administrador.</div>');
    //$this->dbConn->set_charset ('utf8');
}

public function dbQuery($strSQL){
    $strError = '<div> <b>[ERROR]</b> 
    <br/> Ha ocurrido un error durante la ejecuci&oacute;n de la operaci&oacute;n solicitada, si este problema persiste favor de contactar al Administrador.</div>';
    $dbQuery = mysqli_query($this->dbConn, $strSQL);
    if(mysqli_error($this->dbConn)){
        echo $strError; 
    }else{
        return $dbQuery;
    }
}
}

我尝试像这样使用它:

require ("../cls/mysqliData.php");
$DBi = new DBi();
$strSQL = 'select id_usuario from cat_usuarios;';
$dbArray = $DBi->dbQuery($strSQL);  
$i=0;
while($dbRow = mysqli_fetch_array($dbArray, MYSQLI_ASSOC)){
    $idUsuario[$i] = $dbRow["id_usuario"];
    $i++;
}
echo count($dbRow);     
echo $idUsuario[0];

但我不知道为什么我不工作,我知道连接没问题,但我认为我没有将查询发送到连接。如果你能告诉我我的错误在哪里,我需要改变什么部分,我将不胜感激。 非常感谢。 我很抱歉我的英语不好。

【问题讨论】:

  • 只是从 mysql_ 切换到 mysqli_ 确实完成了:什么都没有。除非您还使用绑定参数/存储过程/事务等,否则这真的毫无意义。 PDO 通常是更好的选择。
  • 非常感谢您的宝贵时间,我主要使用存储过程。
  • 那里有几个不错的 mysql 到 mysqli 转换器。

标签: php mysql class mysqli


【解决方案1】:

通过这门课,我解决了我的问题:

public function __construct(){
    $this->dbHost = 'host';
    $this->dbUser = 'user';
    $this->dbPass = 'pass';
    $this->dbName = 'database';
    $this->dbConn = new mysqli($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);
    $this->dbConn->set_charset("utf8");

    if(mysqli_connect_errno()){
        echo '<div> <b>[ERROR #'.mysqli_connect_errno().']</b> 
        <br/> Ha ocurrido un error durante la conexi&oacute;n a la Base de Datos, si este problema persiste favor de contactar al Administrador.</div>';
    }else{
        echo 'Conexion Exitosa<br/>';
    }
}

public function dbQuery($strSQL, $Debug = 0){
    $vFlag = 1;
    $sqlError = '<div> <b>[ERROR]</b> 
    <br/> Ha ocurrido un error durante la ejecuci&oacute;n de la operaci&oacute;n solicitada, si este problema persiste favor de contactar al Administrador.</div>';
    if($vFlag == $Debug){
        $Query = mysqli_query($this->dbConn, $strSQL);

        if(mysqli_errno($this->dbConn)){
            echo '<i><b>Consulta</b> '.$strSQL.'<br/>';
            echo '<b>Descripción</b>'. mysqli_error($this->dbConn).'</i><br/>';
        }else{
            echo '<i>La consulta <b>['.$strSQL.']</b> se ha ejecutado exitosamente. <br/>';
            return $Query;
        }
    }else{
        if(!mysqli_query($this->dbConn, $strSQL)){
            echo $sqlError;
        }else{
            return $Query;
        }
    }
}

public function fetch_array($dbResult){
    if($dbResult) return mysqli_fetch_array($dbResult, MYSQLI_ASSOC);
}

public function num_rows($dbResult){
    if($dbResult) return mysqli_num_rows($dbResult);
}

public function __destruct(){
    mysqli_close($this->dbConn);
}
}
?>

非常感谢:)

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2018-02-25
    • 2013-04-19
    • 2012-11-26
    相关资源
    最近更新 更多