日期:2014-05-17  浏览次数:20708 次

关于释放数据库结果集的问题。
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);