【发布时间】: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ó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ón de la operació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 转换器。