class DB_Mysql
{
private $host;
private $user;
private $pass;
private $data;
private $conn;
private $result;
function __construct($config=array())
{
$this->host = $config['host'] ? $config['host'] : 'localhost';
$this->port = $config['port'] ? $config['port'] : '3306';
$this->user = $config['user'] ? $config['user'] : 'root';
$this->pass = $config['pass'] ? $config['pass'] : '';
$this->data = $config['data'] ? $config['data'] : '';
}
 
function connect()
{
$server = ($this->port && $this->port != "3306") ? $this->host.":".$this->port : $this->host;
$this->conn = mysql_connect($server,$this->user,$this->pass);
if(!$this->conn)
{
return false;
}
return true;
}
function select_db($data="")
{
$database = $data ? $data : $this->data;
if(!$database)
{
return false;
}
$this->data = $database;
$ifok = mysql_select_db($this->data,$this->conn);
if(!$ifok)
{
return false;
}
return true;
}
function close()
{
return mysql_close($this->conn);
}
function __destruct()
{
return $this->close();
} function query($sql)
{
mysql_query("set names utf8");
$this->result = mysql_query($sql,$this->conn);
if(!$this->result)
{
return false;
}
return $this->result;
}
function get_all($sql="")

$result = $this->query($sql);
     $rowno = mysql_num_rows($result);
    if($rowno>0){ 
     for($row=0;$row<$rowno;$row++ ){ 
             $rows[$row]=mysql_fetch_array($result);

         return $rows; 
       } 
}
function get_one($sql="")
{
$result = $sql ? $this->query($sql) : $this->result;
if(!$result)
{
return false;
}
$rows = mysql_fetch_array($result);
return $rows;
}
}
这个是连库文件,然后我用到session入库的文件,我在第二个文件里面调用这个连库文件的方法,初学者,查阅的下各类资料没找到方法,自己想了个方法
class Session
{
private $expiry = 3600;
public $con;
public function Session()
{
session_set_save_handler(array(& $this,'_session_open'),
array(& $this,'_session_close'),
array(& $this,'_session_read'),
array(& $this,'_session_write'),
array(& $this,'_session_destroy'),
array(& $this,'_session_gc')
);
}
public function __construct(){
if(include_once("./libs/mysql_lib.php")){
$con = new DB_Mysql();
}
}

public function _session_open($save_path,$session_name)
{
$this->con->connect();
return $this->con->select_db();

}

public function _session_close()
{
return $this->con->close();
}

public function _session_read($key)
{
$time = time();
$sql = "select data from file_session where id = '$key' and lasttime > $time";
$row=$this->con->get_one($sql);
if ($row)
{
return($row['data']);
}else
{
return false;
}
}

public function _session_write($key,$data)
{
$lapse_time = time() + $this->expiry;
$sql = "select data from file_session where id = '$key' and lasttime > $lapse_time";
if ($this->con->get_num($sql) == 0)
{
$sql = "insert into file_session values('$key','$data',$lapse_time)";
$this->con->query($sql);
}else
{
$sql = "update file_session set id = '$key',data = '$data',lasttime = $lapse_time where id = '$key'";
$this->con->query($sql);
}
return $result;
}

public function _session_destroy($key)
{
$sql = "delete from file_session where id = '$key'";
$this->con->query($sql);
return $result;
}

public function _session_gc($expiry_time)
{
$expiry_time = time();
$sql = "delete from file_session where lasttime < $expiry_time";
$this->con->query($sql);
return($result);
}
}
$_session_new = new Session();
session_start();$_SESSION['user'] = 'test';可是我老是报错
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource 
就是我标红的那段。。不知道怎么解释啊,求大家帮帮忙了

解决方案 »

  1.   

    public function __construct(){
    if(include_once("./libs/mysql_lib.php")){
    $con = new DB_Mysql(); //这里错了,应该是:$this->con = new DB_Mysql();
    }
    }
      

  2.   

    在你的
    public function _session_open($save_path,$session_name)
    里检查一下
    if($this->con->connect()) echo "connection made sucess!\n";
    else echo "fail!\n";
      

  3.   

    $this->con 还是报错,然后
    if($this->con->connect()) echo "connection made sucess!\n
    无论$this->con->connect()  还是!$this->con->connect()
    都不输出
    怎么解决呀
      

  4.   


    if(include_once("./libs/mysql_lib.php")) // 首先确定路径正确
    {
        $con = new DB_Mysql(); //这个地方应该是 $this->con = new DB_Mysql(); //要配置参数的话,别忘了
    }
      

  5.   

    function close()
    {
    return mysql_close($this->conn);
    }
    function __destruct()
    {
    return $this->close();
    }
    写法有问题,你析构里面调用close,而$this->conn不一定存在,close函数里面加个判断吧。
      

  6.   

    class bb{
    public function __construct(){
    if(include_once("./libs/mysql_lib.php")){
    $this->con = new DB_Mysql();
    $this->con->connect();
    $this->con->select_db("file");
    $sql = "select * from file_user ";
    echo $this->con->get_one($sql);
    }
    }
    }
    $cc = new bb();
    如果是这个样的话  ,我是可以调用DB_mysql的 但是放到session这个类的时候就会报DB_mysql的mysql_close关闭的数据库链接错误,额这个可能还涉及到session入库的类的写法是不是有错
    ps.感谢大家的回复
      

  7.   

    Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource  
    这个错误是因为数据库连接资源已经失效,建议检查一下是否有unset操作