class DB{
var $host;
var $username;
var $password;
var $database;
var $conn;
function DB()
{
$this->host = "localhost:3306";
$this->username = "root";
$this->password = "dd";
$this->database = "bookstore";
}
function Connect()
{
$this->conn = mysql_connect($this->host,$this->username,$this->password) or
die ("could not connect to $this->host");
mysql_select_db($this->database,$this->conn) or
die ("could not switch to $this->database");
return $this->conn;
}
function Close()
{
mysql_close($this->conn);
}
function Query($sql)
{
//echo $sql;
$res = mysql_query($sql,$this->conn) or
die("could not query database");
return $res;
}
function GetRowsNum($res)
{
$rowno = 0;
$rowno = mysql_num_rows($res);
return $rowno;
}
}
使用过程中是这么使用的
$mydb = new DB();
$sql = "select * from table order by id desc"; //这个表只有50条记录
$mydb->Connect();
$res = $mydb->query($sql);
while ( $myrow = mysql_fetch_array($res) {
echo $myrow["id"]
}
$mydb->close();
大概就是这么用的,但是反复使用过程中发现数据库经常挂住,请问我写的类对么??我数据库打开的时候我最后页关闭了,请各位看看是否有问题,谢谢
16 个解决方案
#1
没有。网页关闭,服务进程也会关。自然Myql也关闭。
#2
$mydb = new DB();
$sql = "select * from table order by id desc"; //这个表只有50条记录
$mydb->Connect();
$res = $mydb->query($sql);
while ( $myrow = mysql_fetch_array($res) {
echo $myrow["id"]
}
mysql_free_result($res); //自己写相应的方法 //你应该检查多方面检查。
$mydb->close();
#3
如果这样写访问量大一些的话可能会挂掉(个人认为)
每次new一个DB都应该会产生一个数据库连接
个人认为如果所有用户共享一个数据库连接,
或者不同类型的用户共享一个连接比较好(比如电影版的用户共享一个连接,电视版用户共享一个连接)
刚学PHP不久,仅供参考,说错了可不要笑话我:)
每次new一个DB都应该会产生一个数据库连接
个人认为如果所有用户共享一个数据库连接,
或者不同类型的用户共享一个连接比较好(比如电影版的用户共享一个连接,电视版用户共享一个连接)
刚学PHP不久,仅供参考,说错了可不要笑话我:)
#4
看起来是不会的!
会不会是你的服务器有问题!
会不会是你的服务器有问题!
#5
用 ADODB 好了。没有必要每个人都自己写个 DB类
#6
我个人觉得是APACHE 中 PHP内存设定的问题。
你这么做,没有limit的情况下,在大数据量的情况下,PHP吃内存的情况非常严重。
我测试过,在PHP内存为8MB,对300个记录进行各种判断,存入数组等等各种操作的情况下就已经是非常严重了。
你这么做,没有limit的情况下,在大数据量的情况下,PHP吃内存的情况非常严重。
我测试过,在PHP内存为8MB,对300个记录进行各种判断,存入数组等等各种操作的情况下就已经是非常严重了。
#7
严重关注这个问题!
请教各位几个上面解答中的疑惑:
1、mysql_free_result这个方法有必要么?(程序在毫秒计的时间内运行完毕后马上就自动释放了吧)
2、共享mysql连接,这个怎样实现?怎样让b用户使用a用户开启的长连接?
3、我想这个和类本身没有关系。但是区区几十条记录,怎么会导致服务器的mysql频繁当?而不是apache?
4、有些时候要选择数据表的总记录数,必须进行无limit的简单查询,这样吃内存严重?怎么办?
5、存入数组和300个记录判断造成严重吃内存是指往哪里?
请教各位几个上面解答中的疑惑:
1、mysql_free_result这个方法有必要么?(程序在毫秒计的时间内运行完毕后马上就自动释放了吧)
2、共享mysql连接,这个怎样实现?怎样让b用户使用a用户开启的长连接?
3、我想这个和类本身没有关系。但是区区几十条记录,怎么会导致服务器的mysql频繁当?而不是apache?
4、有些时候要选择数据表的总记录数,必须进行无limit的简单查询,这样吃内存严重?怎么办?
5、存入数组和300个记录判断造成严重吃内存是指往哪里?
#8
这个基本不会有什么问题。如果你感觉那里不对了。尽量把具体现象说出来! 要说代码吗。这个那里会有什么浪费资源的. 你的MYSQL如果经常挂,建议去看看MYSQL进程是不是有死掉的,如果对MYSQL熟悉,自己写个守护进程好了.当然这样就麻烦些了。反正一句话,如果MYSQL经常挂,还是去找MYSQL本身吧!!
#9
我以前也发现pear DB函数经常把mysql挂了
后来我重新写过DB类才行。
mysql释放不了资源
至今不懂是什么问题造成的
后来我重新写过DB类才行。
mysql释放不了资源
至今不懂是什么问题造成的
#10
不会啊。网页关闭,连接也关闭。长连接就不知道了。但不可能在php平台层面上实现a用户资源给b用户。除非你在自己的程序里建立对应的缓冲机制(也就是应用层)
查询总记录数,可以 select 其中一个小的字段吧?不必要 *
300个记录应该不算什么吧。看你的数据是怎样了。和存的方法。
查询总记录数,可以 select 其中一个小的字段吧?不必要 *
300个记录应该不算什么吧。看你的数据是怎样了。和存的方法。
#11
我是在国外申请的空间和服务器,网站经常突然down掉(就是数据库的问题,因为访问静态网页可以), 联系了管理员,他们让我检查我的程序是否在结尾没有关闭数据库,我检查了,开始确实这样,后来关闭了,但是偶尔还会发生, 后来他们说页可能是其他客户的问题,因为我们都是共享的mysql,如果他们的程序有问题,我的也会牵连进去....55555.
#12
select *要比select id快。mysql优化上是这么写的。
#13
从来没有用过 mysql_close,呵呵。。
“select *要比select id快。”
单单指在mysql数据库中查询速度,并不代表整体速度。呵呵,还有其他因素的,如果web与数据库不在一台机器上,网络速度影响也很大,尤其*里面有很多东东的时候,呵呵。再说,消耗资源也不小,还是全程的消耗。呵呵
另外,lz,现在有很多现成的数据库操作类,拿来看看就知道很多问题:)
“select *要比select id快。”
单单指在mysql数据库中查询速度,并不代表整体速度。呵呵,还有其他因素的,如果web与数据库不在一台机器上,网络速度影响也很大,尤其*里面有很多东东的时候,呵呵。再说,消耗资源也不小,还是全程的消耗。呵呵
另外,lz,现在有很多现成的数据库操作类,拿来看看就知道很多问题:)
#14
mysql_free_result mysql_close()都必须有....
得到记录集马上断开连接...
我的DB类...共享一下..写得不算好,但从来没有挂过服务器
得到记录集马上断开连接...
我的DB类...共享一下..写得不算好,但从来没有挂过服务器
#15
class Database
{
var $server = "";
var $database = "";
var $user = "";
var $password = "";
var $msgflag = "";
var $link = "";
var $error = "<center><h1>The database connection error</h1></center>";
function Database(){
}
function getConnectionToDBX1(){
$this->link=@mysql_connect("192.168.0.1","admin","admin")
or die($this->error);
@mysql_select_db("door_server",$this->link);
@mysql_query("set autocommit=0");
}
/*
*
* method : release()
* description : 释放数据库的连接
* parameter : 已连接的数据库标识
* return : 成功返回true;失败返回false;
*
*/
function release(){
@$this->execute("commit");
return mysql_close($this->link);
}
/*
*
* method : select($sql)
* description : 取得记录集
* parameter : sql查询语句,数据库连接标识
* return : 返回类型:array
* array中的每一个元素为mysql_fetch_object()得到的对象
*
*/
function select($sql){
$i=0;
$array_result="";
//mysql_unbuffered_query
$db_result=mysql_unbuffered_query($sql,$this->link);
if($db_result){
while($row=mysql_fetch_object($db_result)){
$array_result[$i] = $row;
$i++;
}
mysql_free_result($db_result);
}else{
echo "<!--出错了:" . $sql."-->";
return false;
}
$this->manage_log($sql);
return $array_result;
}
/*
*
* method : execute($sql)
* description : 更新记录
* parameter : sql更新语句,数据库连接标识
* return : 返回类型:boolean
*
*/
function execute($sql){
//$sql = str_replace("\\","\\\\",$sql);
$result=mysql_query($sql,$this->link);
if(!$result){
echo "<!--出错了:" . $sql."-->";
return false;
}else{
$this->manage_log($sql);
return true;
}
}
}
太长了,只贴到这里
{
var $server = "";
var $database = "";
var $user = "";
var $password = "";
var $msgflag = "";
var $link = "";
var $error = "<center><h1>The database connection error</h1></center>";
function Database(){
}
function getConnectionToDBX1(){
$this->link=@mysql_connect("192.168.0.1","admin","admin")
or die($this->error);
@mysql_select_db("door_server",$this->link);
@mysql_query("set autocommit=0");
}
/*
*
* method : release()
* description : 释放数据库的连接
* parameter : 已连接的数据库标识
* return : 成功返回true;失败返回false;
*
*/
function release(){
@$this->execute("commit");
return mysql_close($this->link);
}
/*
*
* method : select($sql)
* description : 取得记录集
* parameter : sql查询语句,数据库连接标识
* return : 返回类型:array
* array中的每一个元素为mysql_fetch_object()得到的对象
*
*/
function select($sql){
$i=0;
$array_result="";
//mysql_unbuffered_query
$db_result=mysql_unbuffered_query($sql,$this->link);
if($db_result){
while($row=mysql_fetch_object($db_result)){
$array_result[$i] = $row;
$i++;
}
mysql_free_result($db_result);
}else{
echo "<!--出错了:" . $sql."-->";
return false;
}
$this->manage_log($sql);
return $array_result;
}
/*
*
* method : execute($sql)
* description : 更新记录
* parameter : sql更新语句,数据库连接标识
* return : 返回类型:boolean
*
*/
function execute($sql){
//$sql = str_replace("\\","\\\\",$sql);
$result=mysql_query($sql,$this->link);
if(!$result){
echo "<!--出错了:" . $sql."-->";
return false;
}else{
$this->manage_log($sql);
return true;
}
}
}
太长了,只贴到这里
#16
mysql_unbuffered_query
(PHP 4 >= 4.0.6)
mysql_unbuffered_query -- 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行
说明
resource mysql_unbuffered_query ( string query [, resource link_identifier])
mysql_unbuffered_query() 向 MySQL 发送一条 SQL 查询 query,但不像 mysql_query() 那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。当使用多个数据库连接时,必须指定可选参数 link_identifier。
注: mysql_unbuffered_query() 的好处是有代价的:在 mysql_unbuffered_query() 返回的结果集之上不能使用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。
参见 mysql_query()。
#1
没有。网页关闭,服务进程也会关。自然Myql也关闭。
#2
$mydb = new DB();
$sql = "select * from table order by id desc"; //这个表只有50条记录
$mydb->Connect();
$res = $mydb->query($sql);
while ( $myrow = mysql_fetch_array($res) {
echo $myrow["id"]
}
mysql_free_result($res); //自己写相应的方法 //你应该检查多方面检查。
$mydb->close();
#3
如果这样写访问量大一些的话可能会挂掉(个人认为)
每次new一个DB都应该会产生一个数据库连接
个人认为如果所有用户共享一个数据库连接,
或者不同类型的用户共享一个连接比较好(比如电影版的用户共享一个连接,电视版用户共享一个连接)
刚学PHP不久,仅供参考,说错了可不要笑话我:)
每次new一个DB都应该会产生一个数据库连接
个人认为如果所有用户共享一个数据库连接,
或者不同类型的用户共享一个连接比较好(比如电影版的用户共享一个连接,电视版用户共享一个连接)
刚学PHP不久,仅供参考,说错了可不要笑话我:)
#4
看起来是不会的!
会不会是你的服务器有问题!
会不会是你的服务器有问题!
#5
用 ADODB 好了。没有必要每个人都自己写个 DB类
#6
我个人觉得是APACHE 中 PHP内存设定的问题。
你这么做,没有limit的情况下,在大数据量的情况下,PHP吃内存的情况非常严重。
我测试过,在PHP内存为8MB,对300个记录进行各种判断,存入数组等等各种操作的情况下就已经是非常严重了。
你这么做,没有limit的情况下,在大数据量的情况下,PHP吃内存的情况非常严重。
我测试过,在PHP内存为8MB,对300个记录进行各种判断,存入数组等等各种操作的情况下就已经是非常严重了。
#7
严重关注这个问题!
请教各位几个上面解答中的疑惑:
1、mysql_free_result这个方法有必要么?(程序在毫秒计的时间内运行完毕后马上就自动释放了吧)
2、共享mysql连接,这个怎样实现?怎样让b用户使用a用户开启的长连接?
3、我想这个和类本身没有关系。但是区区几十条记录,怎么会导致服务器的mysql频繁当?而不是apache?
4、有些时候要选择数据表的总记录数,必须进行无limit的简单查询,这样吃内存严重?怎么办?
5、存入数组和300个记录判断造成严重吃内存是指往哪里?
请教各位几个上面解答中的疑惑:
1、mysql_free_result这个方法有必要么?(程序在毫秒计的时间内运行完毕后马上就自动释放了吧)
2、共享mysql连接,这个怎样实现?怎样让b用户使用a用户开启的长连接?
3、我想这个和类本身没有关系。但是区区几十条记录,怎么会导致服务器的mysql频繁当?而不是apache?
4、有些时候要选择数据表的总记录数,必须进行无limit的简单查询,这样吃内存严重?怎么办?
5、存入数组和300个记录判断造成严重吃内存是指往哪里?
#8
这个基本不会有什么问题。如果你感觉那里不对了。尽量把具体现象说出来! 要说代码吗。这个那里会有什么浪费资源的. 你的MYSQL如果经常挂,建议去看看MYSQL进程是不是有死掉的,如果对MYSQL熟悉,自己写个守护进程好了.当然这样就麻烦些了。反正一句话,如果MYSQL经常挂,还是去找MYSQL本身吧!!
#9
我以前也发现pear DB函数经常把mysql挂了
后来我重新写过DB类才行。
mysql释放不了资源
至今不懂是什么问题造成的
后来我重新写过DB类才行。
mysql释放不了资源
至今不懂是什么问题造成的
#10
不会啊。网页关闭,连接也关闭。长连接就不知道了。但不可能在php平台层面上实现a用户资源给b用户。除非你在自己的程序里建立对应的缓冲机制(也就是应用层)
查询总记录数,可以 select 其中一个小的字段吧?不必要 *
300个记录应该不算什么吧。看你的数据是怎样了。和存的方法。
查询总记录数,可以 select 其中一个小的字段吧?不必要 *
300个记录应该不算什么吧。看你的数据是怎样了。和存的方法。
#11
我是在国外申请的空间和服务器,网站经常突然down掉(就是数据库的问题,因为访问静态网页可以), 联系了管理员,他们让我检查我的程序是否在结尾没有关闭数据库,我检查了,开始确实这样,后来关闭了,但是偶尔还会发生, 后来他们说页可能是其他客户的问题,因为我们都是共享的mysql,如果他们的程序有问题,我的也会牵连进去....55555.
#12
select *要比select id快。mysql优化上是这么写的。
#13
从来没有用过 mysql_close,呵呵。。
“select *要比select id快。”
单单指在mysql数据库中查询速度,并不代表整体速度。呵呵,还有其他因素的,如果web与数据库不在一台机器上,网络速度影响也很大,尤其*里面有很多东东的时候,呵呵。再说,消耗资源也不小,还是全程的消耗。呵呵
另外,lz,现在有很多现成的数据库操作类,拿来看看就知道很多问题:)
“select *要比select id快。”
单单指在mysql数据库中查询速度,并不代表整体速度。呵呵,还有其他因素的,如果web与数据库不在一台机器上,网络速度影响也很大,尤其*里面有很多东东的时候,呵呵。再说,消耗资源也不小,还是全程的消耗。呵呵
另外,lz,现在有很多现成的数据库操作类,拿来看看就知道很多问题:)
#14
mysql_free_result mysql_close()都必须有....
得到记录集马上断开连接...
我的DB类...共享一下..写得不算好,但从来没有挂过服务器
得到记录集马上断开连接...
我的DB类...共享一下..写得不算好,但从来没有挂过服务器
#15
class Database
{
var $server = "";
var $database = "";
var $user = "";
var $password = "";
var $msgflag = "";
var $link = "";
var $error = "<center><h1>The database connection error</h1></center>";
function Database(){
}
function getConnectionToDBX1(){
$this->link=@mysql_connect("192.168.0.1","admin","admin")
or die($this->error);
@mysql_select_db("door_server",$this->link);
@mysql_query("set autocommit=0");
}
/*
*
* method : release()
* description : 释放数据库的连接
* parameter : 已连接的数据库标识
* return : 成功返回true;失败返回false;
*
*/
function release(){
@$this->execute("commit");
return mysql_close($this->link);
}
/*
*
* method : select($sql)
* description : 取得记录集
* parameter : sql查询语句,数据库连接标识
* return : 返回类型:array
* array中的每一个元素为mysql_fetch_object()得到的对象
*
*/
function select($sql){
$i=0;
$array_result="";
//mysql_unbuffered_query
$db_result=mysql_unbuffered_query($sql,$this->link);
if($db_result){
while($row=mysql_fetch_object($db_result)){
$array_result[$i] = $row;
$i++;
}
mysql_free_result($db_result);
}else{
echo "<!--出错了:" . $sql."-->";
return false;
}
$this->manage_log($sql);
return $array_result;
}
/*
*
* method : execute($sql)
* description : 更新记录
* parameter : sql更新语句,数据库连接标识
* return : 返回类型:boolean
*
*/
function execute($sql){
//$sql = str_replace("\\","\\\\",$sql);
$result=mysql_query($sql,$this->link);
if(!$result){
echo "<!--出错了:" . $sql."-->";
return false;
}else{
$this->manage_log($sql);
return true;
}
}
}
太长了,只贴到这里
{
var $server = "";
var $database = "";
var $user = "";
var $password = "";
var $msgflag = "";
var $link = "";
var $error = "<center><h1>The database connection error</h1></center>";
function Database(){
}
function getConnectionToDBX1(){
$this->link=@mysql_connect("192.168.0.1","admin","admin")
or die($this->error);
@mysql_select_db("door_server",$this->link);
@mysql_query("set autocommit=0");
}
/*
*
* method : release()
* description : 释放数据库的连接
* parameter : 已连接的数据库标识
* return : 成功返回true;失败返回false;
*
*/
function release(){
@$this->execute("commit");
return mysql_close($this->link);
}
/*
*
* method : select($sql)
* description : 取得记录集
* parameter : sql查询语句,数据库连接标识
* return : 返回类型:array
* array中的每一个元素为mysql_fetch_object()得到的对象
*
*/
function select($sql){
$i=0;
$array_result="";
//mysql_unbuffered_query
$db_result=mysql_unbuffered_query($sql,$this->link);
if($db_result){
while($row=mysql_fetch_object($db_result)){
$array_result[$i] = $row;
$i++;
}
mysql_free_result($db_result);
}else{
echo "<!--出错了:" . $sql."-->";
return false;
}
$this->manage_log($sql);
return $array_result;
}
/*
*
* method : execute($sql)
* description : 更新记录
* parameter : sql更新语句,数据库连接标识
* return : 返回类型:boolean
*
*/
function execute($sql){
//$sql = str_replace("\\","\\\\",$sql);
$result=mysql_query($sql,$this->link);
if(!$result){
echo "<!--出错了:" . $sql."-->";
return false;
}else{
$this->manage_log($sql);
return true;
}
}
}
太长了,只贴到这里
#16
mysql_unbuffered_query
(PHP 4 >= 4.0.6)
mysql_unbuffered_query -- 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行
说明
resource mysql_unbuffered_query ( string query [, resource link_identifier])
mysql_unbuffered_query() 向 MySQL 发送一条 SQL 查询 query,但不像 mysql_query() 那样自动获取并缓存结果集。一方面,这在处理很大的结果集时会节省可观的内存。另一方面,可以在获取第一行后立即对结果集进行操作,而不用等到整个 SQL 语句都执行完毕。当使用多个数据库连接时,必须指定可选参数 link_identifier。
注: mysql_unbuffered_query() 的好处是有代价的:在 mysql_unbuffered_query() 返回的结果集之上不能使用 mysql_num_rows() 和 mysql_data_seek()。此外在向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。
参见 mysql_query()。