我今年19,很爱编程,因为快要工作的原因,我用了一个月的时间去制作了一个新闻及留言板系统当作是自己的个人作品,我也很怕进不了这个行业,所以我一直在努力学习PHP更高级的知识。因为之前学过C++有点面向对象的基础,所以自己写了一个数据库连接的类,还得请教一下各位哪里写得不好或者需要改进,我定会悉心听取大家的意见,其实...我还想多交点朋友,每天在家打开电脑就写代码,那种感觉真的好孤独。好了,不多说,附上代码,请大家多多指点!
<?
//数据库连接类
class db_conn
{
public $db_server_name;
public $db_name;
public $db_pass;
public $db_databese;
public $link;
public $sql;
public $result;
//构造函数
function __construct($server='localhost',$name='root',$pass='3561176',$database='kenny_site'){
$this->db_server_name = $server;
$this->db_name = $name;
$this->db_pass = $pass;
$this->db_database = $database;
//调用函数
$this->connect();
$this->select($database);
$this->Set_code();
}
//数据库连接
function connect(){
$this->link = mysql_connect($this->db_server_name,$this->db_name,$this->db_pass,$this->db_database) or die("连接 失败");
}
//选择数据库
function select($data){
mysql_select_db($data);
}
//设置字符编码
function Set_code(){
mysql_query("SET NAMES 'UTF8'");
}
//查询数据库函数
function query($sql){
//echo $sql;
$this->result = mysql_query($sql);
}
//获取查询值
function fetch(){
$i = 0;
$arr = array();
while ( $re = mysql_fetch_array($this->result) ){
$arr[$i] = $re;
$i++;
}echo mysql_error();
return $arr;
}
}
?>
<? //生成实例
/*
$db =new db_conn();
$db->query("select Title,Content from news");
$hello = $db->fetch();
foreach($hello as $name=> $value){
echo $value["Title"].'<br>';
echo $value["Content"].'<br>';
}
*/
?>
8 个解决方案
#1
足够轻量,能满足基本需求了。需求不变的前提下,错误处理方面有些改进空间。
#2
//指手画脚一下,勿怪
//查询数据库函数
function query($sql){
//echo $sql;
$this->result = mysql_query($sql) or die(mysql_error());
}
//获取查询值
function fetch(){
// $i = 0;
$arr = array();
while ( $re = mysql_fetch_array($this->result) ){
// $arr[$i] = $re;
// $i++;
$arr[$i] = $re;
}
return $arr;
}
#3
fetch()感觉太繁琐了,打散结果集然后又拼成数组不划算。
#4
1、缺少检错机制
2、fetch 应更名为 fetchall 即读取全部结果
保留原 fetch 方法名并调整算法 每次读取一条结果
3、query 方法总是用 $this->result 保存 mysql_query 的返回
一旦执行了非 select 指令,将导致 fetch 方法失败
4、使用单一的变量保存结果集资源,将导致该类的对象不能嵌套使用
2、fetch 应更名为 fetchall 即读取全部结果
保留原 fetch 方法名并调整算法 每次读取一条结果
3、query 方法总是用 $this->result 保存 mysql_query 的返回
一旦执行了非 select 指令,将导致 fetch 方法失败
4、使用单一的变量保存结果集资源,将导致该类的对象不能嵌套使用
#5
public $db_server_name;
这一堆变量,最好设为private,否则你的封装只是为了快速调用方法而己,对变量应该保护好。
$this->link
既然有了link标识,为何 select db,query 时不用呢??
$this->Set_code();
既然有了这个接口,何不允许用户自定义呢??
如楼上所说,
fetch =》 fetchAll 获所有
fetchRow 获取行 //这两个必须有吧
fetchOne 获得第一行,行一个字段,最好有,有时 select count 的时候很好用。
还有获取列之类的,可以有,看需求。。。
如果用户执行了insert,那乍样获取自增id?
所有的方法,缺少 public private 标识符,标准写法,都需要写上
connect , select, setcode 之类的,可以设为private保护。
Set_code() 建议使用驼峰方式 setCode
这一堆变量,最好设为private,否则你的封装只是为了快速调用方法而己,对变量应该保护好。
$this->link
既然有了link标识,为何 select db,query 时不用呢??
$this->Set_code();
既然有了这个接口,何不允许用户自定义呢??
如楼上所说,
fetch =》 fetchAll 获所有
fetchRow 获取行 //这两个必须有吧
fetchOne 获得第一行,行一个字段,最好有,有时 select count 的时候很好用。
还有获取列之类的,可以有,看需求。。。
如果用户执行了insert,那乍样获取自增id?
所有的方法,缺少 public private 标识符,标准写法,都需要写上
connect , select, setcode 之类的,可以设为private保护。
Set_code() 建议使用驼峰方式 setCode
#6
黛玉MM 说出了我的心声.我就不废话了.建议参考一些现成的类,分析一下为什么有不一样.
#7
嗯!初学者动手写一下是好的,即使写的功能不够完全,但是参考一些成熟的类然后对比自己的就能发现自己的不足!
然后才能不断成长,当对这个东西很熟的时候,我个人建议平时开发的时候使用一些别人写好的很成熟的最大优化的类!包括分页啦,图片处理这些,图片上传这些!
懂了原理之后就没必要自己写了,等你写出的类比那些还好的时候,就是你向别人提供开源类的时候了!
然后才能不断成长,当对这个东西很熟的时候,我个人建议平时开发的时候使用一些别人写好的很成熟的最大优化的类!包括分页啦,图片处理这些,图片上传这些!
懂了原理之后就没必要自己写了,等你写出的类比那些还好的时候,就是你向别人提供开源类的时候了!
#8
存到数组了,不错,可以先释放资源了。
#1
足够轻量,能满足基本需求了。需求不变的前提下,错误处理方面有些改进空间。
#2
//指手画脚一下,勿怪
//查询数据库函数
function query($sql){
//echo $sql;
$this->result = mysql_query($sql) or die(mysql_error());
}
//获取查询值
function fetch(){
// $i = 0;
$arr = array();
while ( $re = mysql_fetch_array($this->result) ){
// $arr[$i] = $re;
// $i++;
$arr[$i] = $re;
}
return $arr;
}
#3
fetch()感觉太繁琐了,打散结果集然后又拼成数组不划算。
#4
1、缺少检错机制
2、fetch 应更名为 fetchall 即读取全部结果
保留原 fetch 方法名并调整算法 每次读取一条结果
3、query 方法总是用 $this->result 保存 mysql_query 的返回
一旦执行了非 select 指令,将导致 fetch 方法失败
4、使用单一的变量保存结果集资源,将导致该类的对象不能嵌套使用
2、fetch 应更名为 fetchall 即读取全部结果
保留原 fetch 方法名并调整算法 每次读取一条结果
3、query 方法总是用 $this->result 保存 mysql_query 的返回
一旦执行了非 select 指令,将导致 fetch 方法失败
4、使用单一的变量保存结果集资源,将导致该类的对象不能嵌套使用
#5
public $db_server_name;
这一堆变量,最好设为private,否则你的封装只是为了快速调用方法而己,对变量应该保护好。
$this->link
既然有了link标识,为何 select db,query 时不用呢??
$this->Set_code();
既然有了这个接口,何不允许用户自定义呢??
如楼上所说,
fetch =》 fetchAll 获所有
fetchRow 获取行 //这两个必须有吧
fetchOne 获得第一行,行一个字段,最好有,有时 select count 的时候很好用。
还有获取列之类的,可以有,看需求。。。
如果用户执行了insert,那乍样获取自增id?
所有的方法,缺少 public private 标识符,标准写法,都需要写上
connect , select, setcode 之类的,可以设为private保护。
Set_code() 建议使用驼峰方式 setCode
这一堆变量,最好设为private,否则你的封装只是为了快速调用方法而己,对变量应该保护好。
$this->link
既然有了link标识,为何 select db,query 时不用呢??
$this->Set_code();
既然有了这个接口,何不允许用户自定义呢??
如楼上所说,
fetch =》 fetchAll 获所有
fetchRow 获取行 //这两个必须有吧
fetchOne 获得第一行,行一个字段,最好有,有时 select count 的时候很好用。
还有获取列之类的,可以有,看需求。。。
如果用户执行了insert,那乍样获取自增id?
所有的方法,缺少 public private 标识符,标准写法,都需要写上
connect , select, setcode 之类的,可以设为private保护。
Set_code() 建议使用驼峰方式 setCode
#6
黛玉MM 说出了我的心声.我就不废话了.建议参考一些现成的类,分析一下为什么有不一样.
#7
嗯!初学者动手写一下是好的,即使写的功能不够完全,但是参考一些成熟的类然后对比自己的就能发现自己的不足!
然后才能不断成长,当对这个东西很熟的时候,我个人建议平时开发的时候使用一些别人写好的很成熟的最大优化的类!包括分页啦,图片处理这些,图片上传这些!
懂了原理之后就没必要自己写了,等你写出的类比那些还好的时候,就是你向别人提供开源类的时候了!
然后才能不断成长,当对这个东西很熟的时候,我个人建议平时开发的时候使用一些别人写好的很成熟的最大优化的类!包括分页啦,图片处理这些,图片上传这些!
懂了原理之后就没必要自己写了,等你写出的类比那些还好的时候,就是你向别人提供开源类的时候了!
#8
存到数组了,不错,可以先释放资源了。