Home >Backend Development >PHP Tutorial > 关于释放数据库结果集的有关问题

关于释放数据库结果集的有关问题

WBOY
WBOYOriginal
2016-06-13 13:35:401148browse

关于释放数据库结果集的问题。
class DB{
private $host; //服务区地址
private $user; //登录账号
private $pass; //登录密码
private $name; //数据库名称
private $font; //数据库字符集
private $conn; //数据库连接源
private $result; //结果集
private $rowRst; //查询单条记录
private $rowArray=array(); //查询多条记录
private $rowAff; //增改删的记录条数

public function __construct($host,$user,$pass,$name,$font){
$this->host=$host;
$this->user=$user;
$this->pass=$pass;
$this->name=$name;
$this->font=$font;
$this->init_conn();
}

//连接数据库
private function init_conn(){
if(!$this->conn=mysql_connect($this->host,$this->user,$this->pass)){
exit('数据库连接错误');
}
if(!mysql_select_db($this->name,$this->conn)){
exit('数据库选择错误');
}
if(!mysql_query('SET NAMES '.$this->font)){
exit('字符集错误');
}
}

//执行sql语句
public function _query($sql){
if(!$this->result=mysql_query($sql,$this->conn)){
exit('sql执行失败');
}
return $this->result;
}

//查询单挑数据
public function _fetch_array($sql){
$this->_query($sql);
$this->rowRst=mysql_fetch_array($this->result,MYSQL_ASSOC);
return $this->rowRst;
}

//查询多条数据
public function _fetch_array_list($sql){
$this->_query($sql);
while (!!$rows=mysql_fetch_array($this->result,MYSQL_ASSOC)){
$this->rowArray[]=$rows;
}
return $this->rowArray;
}

//增改删的影响记录条数
public function _affected_rows(){
$this->rowAff=mysql_affected_rows();
return $this->rowAff;
}

//取得上一步INSERT操作的ID号
public function _insert_id(){
return mysql_insert_id();
}

//释放结果集
public function _free_result(){
$this->rowAff='';
$this->rowArray='';
$this->rowRst='';
mysql_free_result($this->result);
}

//关闭数据库
public function _close_conn(){
$this->_free_result();
mysql_close($this->conn);
}
}
当我用_close_conn这个方法是,网页面显示mysql_free_result():supplied argument is not a valid mysql result resource
如何解决这个问题


------解决方案--------------------
在mysql_free_result($this->result); 之前你先看一下 $this->result 变成什么了。是不是你原先打开的资源
------解决方案--------------------
if(is_resource($this->result))
{
mysql_free_result($this->result);
$this->result = NULL;
}
------解决方案--------------------
你的 $this->result 是这样赋值的
$this->result=mysql_query($sql,$this->conn)

mysql_query 只在执行 select 语句时返回的是资源,其他的都是逻辑值

所以 mysql_free_result($this->result);
要写作
if(is_resource($this->result)) mysql_free_result($this->result);

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn