收录日期:2021/01/26 16:21:33 时间:2016/07/12 06:44:35 标签:基础编程


刚搞PHP  第一次写个数据库类  大家帮忙看看 

还有什么不足和需要完善的地方吗?  谢谢了~~~  



<?
// 方法
//  Exce(sql);           直接执行SQL语句    返回 是否成功
//  GetOne(id);          根据ID行的值       返回一行的值
//  GetContent(where,fields,order,page,limit);                    
//  save(arr);            保存数据
//  Insert(arr);          数组形式存入         
//  Update(arr);          数组形式存入带ID 
//  Deleteid(id);         根据ID 数组或者单个值 删除
//  Delete(wherr);        根据条件删除 
//  Count(wherr);        根据条件获得记录数       

define("DBroot",dirname(__FILE__)."\\");//文件目录 
define("DBname","DB/china"); //数据库名
define("DB_T","M_"); //表前缀
define("T_T","S_"); //字段前缀

$db=sqlite_open(DBname.".s3db") or die("数据库连接错误!");
sqlite_busy_timeout($db,300);
echo DBname.".s3db"."<br>";



class DB{
var $Conn;        //数据库连接
var $Table;       //数据库名
var $Mod_key;     //增加数据用字段
var $Mod_value;   //增加数据用的值
var $Updates;     //更新数据用的字符串
var $Updateid;    //更新数据用的ID
var $TID = "id";    //表主键
var $Bug = 0;       //是否打印SQL语句
//构造函数
function DB($tablename){
global $db;
$this->Conn=$db;
$this->Table=$tablename;
}


//获取记录
function GetContent($where="1=1",$fields="*",$order="desc",$page=0,$limit=10){
if (is_array($where)){
foreach($where as $key=>$value)
{$arr_where[]=T_T.$key."=".$value;}
$where=implode(" and ",$arr_where);
}
$order=$this->TID." ".$order;
$sql='select '.$fields.'  from '.DB_T.$this->Table.' where '.$where.' order by '.$order.' limit '.$page.','.$limit;
$result=sqlite_query($this->Conn,$sql);
while($rs=sqlite_fetch_array($result)){
$arr[]=$rs;
}
return $arr;
}

//获取单条记录根据主键
function GetOne($id){
$sql='select * from '.DB_T.$this->Table.' where '.$this->TID.'='.$id;
$result=sqlite_query($this->Conn,$sql);
return sqlite_fetch_array($result);
}


//保存数据
function save($Item){
    if(!is_array($Item)) $this->Hait("参数必须是一个数组!");

if (array_key_exists("id",$Item)){
if ($Item['id']=="")
{$this->Insert($Item);}
else
{$this->Update($Item);}
}
else
{$this->Insert($Item);}
}


//根据数组增加数据
 function Insert($Item){
if(!is_array($Item)) $this->Hait("参数必须是一个数组!");
$this->Insert_mod($Item);
$sql="insert into ".DB_T.$this->Table." (".$this->Mod_key.") values ('".$this->Mod_value."');";
$this->Exec($sql);
}

//根据数组更新
 function Update($Item){
if(!is_array($Item)) $this->Hait("参数必须是一个数组!");
$this->Update_mod($Item);
$sql="update  ".DB_T.$this->Table." set ".$this->Updates."  where  ".$this->TID."=".$this->Updateid.";";
$this->Exec($sql);
}

//根据条件删除
 function Delete($where){
$sql="delete from  ".DB_T.$this->Table." where ".$where.";";
$this->Exec($sql);
}


//根据ID删除
 function Deleteid($id){
$sql="delete from ".DB_T.$this->Table." where ".$this->TID." in(".$this->Deleteid_mod($id).");";
$this->Exec($sql);
}


function Deleteid_mod($Input_Item){
  if (is_array($Input_Item)){
foreach ($Input_Item as $key=>$value)
{$Array_value[] = $value;}
}
else
{$Array_value[]=$Input_Item;}

   return implode(",",$Array_value); 
}


function Update_mod($Input_Item){
 
foreach ($Input_Item as $key=>$value){

if ($key=="id")
{$this->Updateid=$value;}
else
{$Array_value[] = T_T.$key."='".$value."'";}

    }
$this->Updates=@implode(",",$Array_value);
}

function Insert_mod($Input_Item){

foreach ($Input_Item as $key => $value)
{
if(empty($value))
{
$value=0;
}

$Array_key[] = T_T.$key;
$Array_value[] = $value;
}
$this->Mod_key = @implode(",",$Array_key);
$this->Mod_value = @implode("','",$Array_value);
}


//总数统计
function Count($where){
$sql="select ".$this->TID." from ".DB_T.$this->Table." where ".$where;
$result=sqlite_query($this->Conn,$sql);
return sqlite_num_rows($result);
}


//错误提示
function Hait($str){
exit("错误:".$str );
}

//执行单条语句
function Exec($sql){
if ($this->Bug){echo "<br>".$sql;}
sqlite_query($this->Conn,$sql);
}

}


//----------------------------------------------------------------------------------------
//下面是调试
$b=new DB("admin");
$a['username']="name";
$a['password']="";
//$a['count']=100;

$aaa['id']=2;
$aaa['username']=4;
$aaa['password']=6;
$aaa['count']=8;
$aa['id']=20;
$aa['username']="222444422222";
$aa['password']="444";
$aa['count']=222222;
$b->Insert($a);
$b->Update($aa);
$b->Deleteid(20);
$b->Deleteid($aaa);
$c=array();
$c=$b->GetContent("id>10","*","asc",1,20);
$d=array();
$d=$b->GetOne(50);
echo "<br>";
echo "ID:".$d['id'];
echo "帐号:".$d['S_username'];
echo "密码:".$d['S_password'];
echo "统计:".$d['S_count'];
echo "<br>";
echo $b->save($a);
echo $b->save($aa);
echo $b->Count("id>40");
foreach($c as $list)
{
echo "ID:".$list['id'];
echo "帐号:".$list['S_username'];
echo "密码:".$list['S_password'];
echo "统计:".$list['S_count'];
echo "<br>";

}




?>

错误提示现在没会整~~

大家帮忙加下呗~~~~~
明天在加100分~~
好长啊,一开始搞短一点
一个功能一个功能的测试
再加一个返回insert_id的函数吧
引用 3 楼 hqaht 的回复:
再加一个返回insert_id的函数吧


sqlite 这个数据库 好像没有这个功能~!

要加只能自己写一个了  ~谢谢啊 
引用 3 楼 hqaht 的回复:
再加一个返回insert_id的函数吧



function insert_id(){
return sqlite_last_insert_rowid($this->Conn); 
}

原来有这个功能!   汗翻译那个说明书真费劲 
你是"今夜打老虎"?那位

呵呵。。。。
引用 5 楼 qq369664666 的回复:
引用 3 楼 hqaht 的回复:
再加一个返回insert_id的函数吧



function insert_id(){
return sqlite_last_insert_rowid($this->Conn);
}

原来有这个功能!   汗翻译那个说明书真费劲


很容易看啊,SQLite支持大部分SQL语句的。

引用 楼主 的回复:


呵呵,支持一下,等一下看看有没有错,哈哈!
引用楼主 qq369664666 的帖子:
PHP code刚搞PHP  第一次写个数据库类  大家帮忙看看 

还有什么不足和需要完善的地方吗?  谢谢了~~~<?//方法
//  Exce(sql);           直接执行SQL语句    返回 是否成功
//  GetOne(id);          根据ID行的值       返回一行的值
//  GetContent(where,fields,order,page,limit);                    
//  save(arr);            保存数据
//  Insert(arr);          数组形式存入         
//  Update(arr);          数组…


呵呵,刚刚看了个错误,是PHP4支持而PHP5是不支持的。


class DB{
var $Conn;        //数据库连接
var $Table;          //数据库名
var $Mod_key;     //增加数据用字段
var $Mod_value;   //增加数据用的值
var $Updates;     //更新数据用的字符串
var $Updateid;    //更新数据用的ID
var $TID = "id";    //表主键
var $Bug = 0;       //是否打印SQL语句
//构造函数
function DB($tablename){
global $db;
$this->Conn=$db;
$this->Table=$tablename;
}


这部分代码的构造函数在PHP 4完全正确,但是在PHP5,构造函数是用__construct,又因现在流行PHP5了

所以,楼主把那部分代码改为:


class DB{
var $Conn;        //数据库连接
var $Table;          //数据库名
var $Mod_key;     //增加数据用字段
var $Mod_value;   //增加数据用的值
var $Updates;     //更新数据用的字符串
var $Updateid;    //更新数据用的ID
var $TID = "id";    //表主键
var $Bug = 0;       //是否打印SQL语句
//构造函数
function __construct($tablename){//这里是在PHP5只是一个函数存在。
global $db;
$this->Conn=$db;
$this->Table=$tablename;
}
好长~没精用看~支持一下...
只看了save方法 

我就觉得你这个得重写了.....
机房
引用 10 楼 Crossmaya 的回复:
只看了save方法 

我就觉得你这个得重写了.....


老大 为什么呢

我是新手 
自己写的话,你还要好好考虑一下!

不过这样的类多的是...

请教无刷新主表明细表分页控件思路 求助:jsp文件如何从html中读取数据 求助:jsp如何从html中读取数据 在IE浏览器中使用Windows窗体控件的问题,请高手请进! [转帖]今天一脚踢飞了一个孩子,我并不觉得过分! 读写INI文件问题 求对列表增删改的例子或者方法.在线急等. 如果转换数组 创建一个窗口,如何实时知道是否被其它窗口挡住? 按钮问题 求一sql语句,高手请进!!急!! VSS 的一个紧急问题,有一个文件无法删除??? winroute设置问题DCHP;哪位大虾懂呢 哪里有托盘程序的例子,谢谢了? 有关于friend ostream& operator<<(ostream &,const Point &)在visual c++ 中的问题 scope=\"page\" 跟scope=\"request\"的区别是什么? 请问一些知名的网络安全或黑客社区 调用已存在的com对象实例 怎么这样 在线急问,applet中如何显示TIF格式图片,马上给分 可怕的病毒???? 什么时候使用链接池? 关于DropDownList的显示问题!不能完全显示,某条长内容记录? ORA-01036: 非法的变量名/编号 vb.net 急 救助 怎么做这个SQL语句呢。大侠们来帮帮忙 有搞过指纹考勤机的吗?能否给我些建议我这样的考勤机能不能实现?也恳请各位单片机高手给予指点!!! 求助:水晶报表的数据源的问题,在线等,解决就结。 各位大侠:adsl --》接HUB---》两台PC ,不可以吗? 用XVID是,为什么编码时有I帧,而解码时解出来都是P帧呢?