db_mysql.php
<?php
class mysql {
var $Host;
var $Database;
var $User;
var $Password;
var $table; //数据表
var $errMes =array(); //记录错误信息
var $field =array(); //查询字段
function mysql($host, $dbuser, $dbpass, $db)
{
$this->Host = $host; //主机
$this->User = $dbuser; //用户
$this->Password = $dbpass; //密码
$this->Database = $db; //数据库名
}
var $Auto_Free = 0; ## Set to 1 for automatic mysql_free_result()
var $Debug = 0; ## Set to 1 for debugging messages.
var $Halt_On_Error = "yes"; ## "yes" (halt with message), "no" (ignore errors quietly), "report" (ignore errror, but spit a warning)
var $Seq_Table = "db_sequence";
var $Record = array();
var $Row;
var $Errno = 0;
var $Error = "";
var $type = "mysql";
var $revision = "1.2";
var $Link_ID = 0;
var $Query_ID = 0;
function DB_Sql($query = "")
{
$this->query($query);
}
function link_id()
{
return $this->Link_ID;
}
function query_id()
{
return $this->Query_ID;
}
function connect($Database = "", $Host = "", $User = "", $Password = "")
{
if ("" == $Database)
$Database = $this->Database;
if ("" == $Host)
$Host = $this->Host;
if ("" == $User)
$User = $this->User;
if ("" == $Password)
$Password = $this->Password;
if (0 == $this->Link_ID) {
$this->Link_ID = mysql_pconnect($Host, $User, $Password);
if (!$this->Link_ID) {
$this->halt("pconnect($Host, $User, \$Password) failed.");
return 0;
}
if (!@mysql_select_db($Database, $this->Link_ID)) {
$this->halt("cannot use database " . $this->Database);
return 0;
}
}
return $this->Link_ID;
}
function free()
{
@mysql_free_result($this->Query_ID);
$this->Query_ID = 0;
}
function query($Query_String)
{
if ($Query_String == "")
return 0;
if (!$this->connect()) {
return 0;
} ;
if ($this->Query_ID) {
$this->free();
}
if ($this->Debug)
printf("Debug: query = %s<br>\n", $Query_String);
$this->Query_ID = @mysql_query($Query_String, $this->Link_ID);
$this->Row = 0;
$this->Errno = mysql_errno();
if (!$this->Query_ID) {
$this->halt("Invalid SQL: " . $Query_String);
}
return $this->Query_ID;
}
function result()
{
if (!$this->Query_ID) {
$this->halt("result called with no query pending.");
return 0;
}
$this->Record = @mysql_fetch_array($this->Query_ID);
$this->Row += 1;
$this->Errno = mysql_errno();
$this->Error = mysql_error();
$stat = is_array($this->Record);
if (!$stat && $this->Auto_Free) {
$this->free();
}
return $stat;
}
function seek($pos = 0)
{
$status = @mysql_data_seek($this->Query_ID, $pos);
if ($status)
$this->Row = $pos;
else {
$this->halt("seek($pos) failed: result has " . $this->num_rows() . " rows");
@mysql_data_seek($this->Query_ID, $this->num_rows());
$this->Row = $this->num_rows;
return 0;
}
return 1;
}
function lock($table, $mode = "write")
{
$this->connect();
$query = "lock tables ";
if (is_array($table)) {
while (list($key, $value) = each($table)) {
if ($key == "read" && $key != 0) {
$query .= "$value read, ";
} else {
$query .= "$value $mode, ";
}
}
$query = substr($query, 0, -2);
} else {
$query .= "$table $mode";
}
$res = @mysql_query($query, $this->Link_ID);
if (!$res) {
$this->halt("lock($table, $mode) failed.");
return 0;
}
return $res;
}
function unlock()
{
$this->connect();
$res = @mysql_query("unlock tables");
if (!$res) {
$this->halt("unlock() failed.");
return 0;
}
return $res;
}
function affected_rows()
{
return @mysql_affected_rows($this->Link_ID);
}
function num_rows()
{
return @mysql_num_rows($this->Query_ID);
}
function num_fields()
{
return @mysql_num_fields($this->Query_ID);
}
function nf()
{
return $this->num_rows();
}
function np()
{
print $this->num_rows();
}
function f($Name)
{
return $this->Record[$Name];
}
function p($Name)
{
print $this->Record[$Name];
}
function nextid($seq_name)
{
$this->connect();
if ($this->lock($this->Seq_Table)) {
$q = sprintf("select nextid from %s where seq_name = '%s'",
$this->Seq_Table,
$seq_name);
$id = @mysql_query($q, $this->Link_ID);
$res = @mysql_fetch_array($id);
if (!is_array($res)) {
$currentid = 0;
$q = sprintf("insert into %s values('%s', %s)",
$this->Seq_Table,
$seq_name,
$currentid);
$id = @mysql_query($q, $this->Link_ID);
} else {
$currentid = $res["nextid"];
}
$nextid = $currentid + 1;
$q = sprintf("update %s set nextid = '%s' where seq_name = '%s'",
$this->Seq_Table,
$nextid,
$seq_name);
$id = @mysql_query($q, $this->Link_ID);
$this->unlock();
} else {
$this->halt("cannot lock " . $this->Seq_Table . " - has it been created?");
return 0;
}
return $nextid;
}
function metadata($table = '', $full = false)
{
$count = 0;
$id = 0;
$res = array();
if ($table) {
$this->connect();
$id = @mysql_list_fields($this->Database, $table);
if (!$id)
$this->halt("Metadata query failed.");
} else {
$id = $this->Query_ID;
if (!$id)
$this->halt("No query specified.");
}
$count = @mysql_num_fields($id);
if (!$full) {
for ($i = 0; $i < $count; $i++) {
$res[$i]["table"] = @mysql_field_table ($id, $i);
$res[$i]["name"] = @mysql_field_name ($id, $i);
$res[$i]["type"] = @mysql_field_type ($id, $i);
$res[$i]["len"] = @mysql_field_len ($id, $i);
$res[$i]["flags"] = @mysql_field_flags ($id, $i);
}
} else { // full
$res["num_fields"] = $count;
for ($i = 0; $i < $count; $i++) {
$res[$i]["table"] = @mysql_field_table ($id, $i);
$res[$i]["name"] = @mysql_field_name ($id, $i);
$res[$i]["type"] = @mysql_field_type ($id, $i);
$res[$i]["len"] = @mysql_field_len ($id, $i);
$res[$i]["flags"] = @mysql_field_flags ($id, $i);
$res["meta"][$res[$i]["name"]] = $i;
}
}
if ($table) @mysql_free_result($id);
return $res;
}
function halt($msg)
{
$this->Error = @mysql_error($this->Link_ID);
$this->Errno = @mysql_errno($this->Link_ID);
if ($this->Halt_On_Error == "no")
return;
$this->haltmsg($msg);
if ($this->Halt_On_Error != "report")
die("Session halted.");
}
function haltmsg($msg)
{
printf("</td></tr></table><b>Database error:</b> %s<br>\n", $msg);
printf("<b>MySQL Error</b>: %s (%s)<br>\n",
$this->Errno,
$this->Error);
}
function table_names()
{
$this->query("SHOW TABLES");
$i = 0;
while ($info = mysql_fetch_row($this->Query_ID)) {
$return[$i]["table_name"] = $info[0];
$return[$i]["tablespace_name"] = $this->Database;
$return[$i]["database"] = $this->Database;
$i++;
}
return $return;
}
function getResArray()
{
return @mysql_fetch_array($this->Query_ID);
}
function getResTotal(){
return @mysql_num_rows($this->Query_ID);
}
/*****************无魂扩展部分***************/
/*
*方法 setTable
*功能 设定查询表名
*参数 $t 表名
*返回 无
*/
function setTable($t){
$this->table=$f;
}//end fun setTable
/*
*方法 getField
*功能 取得要查询的记录
*参数 $f 记录数组
*返回 string
*/
function getField($f=array()){
$this->field=$f;
if(empty($f)){
$this->errMes[]="记录不为空";
$this->mes();
}
foreach($f as $v){
$field.=$v.",";
}
$field=substr($field,0,-1);
return $field;
}//end fun getField
/*
*方法 setFiled
*功能 设定字段
*参数 $f 字段
*返回 无
*/
function setField($f=array()){
$this->field=$f;
}//end fun setFiled
/*
*方法 getRes
*功能 得到用户记录
*参数 $f 字段
*返回 无
*/
function getRes($sql){
$this->query($sql);
while($this->result()){
foreach($this->field as $v){
$res[$v][]=$this->f($v);
}
}
return $res;
}//end fun getRes
/*
*方法 getAmount
*功能 得到数量
*参数 $t 表名
$w 条件
*返回 ini
*/
function getAmount($t,$w=''){
$sql="select count(*) as tot from $t ";
if(!empty($w))$sql.=$w;
//echo $sql;
$this->query($sql);
$this->result();
$tot=$this->f("tot");
return $tot;
}//end fun getAmount
/*
*方法 mes
*功能 显示错误信息
*参数 无
*返回 无
*/
function mes(){
if(count($this->errMes)!=0){
foreach($this->errMes as $v){
echo '<FONT SIZE="" COLOR="#FF0000">[无魂报告]:</FONT>'.$v."<br>";
}
echo BACK;
exit;
}else{
//echo "^_^恭喜,操作成功!<br>";
}
}//end fun mes
function closeDb()
{
@mysql_close($this->Link_ID);
}
}//end class db_mysql.php
?>
--------------------------------------------------------------------------------
然后配合我的Sql类进行得到sql语句..这里我就写了sel部分...
PHP代码:--------------------------------------------------------------------------------
<?php
//****************Sql类*******************
//***************************************
//**** ****
//**** 作者: 无魂 ****
//**** 日期: 2004-3-26 ****
//**** 版本: 1.0 ****
//**** 版权: 无魂 ****
//**** ****
//***************************************
//***************************************
require_once("Base.class.php");
/*
*类名 Sql
*功能 Sql类
*版本 1.0
*日期 2004-3-26
*作者 无魂
*版权 无魂
*说明 无
*/
class Sql extends Base{
var $table; //表
var $where =''; //条件
var $order =''; //排序
var $limit; //查询范围
/*
*方法 getSql
*功能 取得Sql语句
*参数 $field 字段值
*返回 string
*/
function getSel($field){
if(empty($field)){
$this->errMes[]="参数不能为空";
parent::mes();
}
$sql="select ".$field." from ".$this->table." ".$this->where." ".$this->order." ".$this->limit;
return $sql;
}//end fun getSel
/*
*方法 getDel
*功能 取得删除语句
*参数 $field 字段值
*返回 array
*/
function getDel($field){
if(empty($field)){
$this->errMes[]="参数不能为空";
parent::mes();
}
$sql="select ".$field." from ".$this->table." ".$this->where." ".$this->order;
return $sql;
}//end fun getDel
/* ======>set部分<======= */
/*
*方法 setTable
*功能 设定表
*参数 $t 表名
*返回 无
*/
function setTable($t){
$this->table=$t;
}//end fun setTable
/*
*方法 setWhere
*功能 设定条件
*参数 $w 条件
*返回 无
*/
function setWhere($w){
$this->where=$w;
}//end fun setWhere
/*
*方法 setOrder
*功能 设定排序
*参数 $o 排序
*返回 无
*/
function setOrder($o){
$this->order=$o;
}//end fun setOrder
/*
*方法 setLimit
*功能 设定排序
*参数 $o 排序
*返回 无
*/
function setLimit($m,$f=0){
$this->limit="limit $f,$m";
}//end fun setLimit
}//end class Sql
?>
--------------------------------------------------------------------------------
下面是Sql类用到的base类...进行错误报告和一下基本常用的功能的.....(可以不用base然后把 "class Sql extends Base{" 中的extends Base去掉..
base类:Base.class.php
PHP代码:--------------------------------------------------------------------------------
<?php
//****************基础类*******************
//***************************************
//**** ****
//**** 作者: 无魂 ****
//**** 日期: 2004-3-26 ****
//**** 版本: 1.0 ****
//**** 版权: 无魂 ****
//**** ****
//***************************************
//***************************************
/*
*类名 Base
*功能 基础类
*版本 1.0
*日期 2004-3-26
*作者 无魂
*版权 无魂
*说明 无
*/
class Base {
var $errMes =array(); //记录消息
/*
*方法 substrGb
*功能 中文截取
*参数 $str 要截取字符串
$start 从什么地方开始
$len 到什么地方
*返回 string
*/
function substrGb($str,$start,$len){
for($i=0;$i<$start+$len;$i++){
$tmpstr=(ord($str[$i])>=161 && ord($str[$i])<=247&& ord($str[$i+1])>=161 && ord($str[$i+1])<=254)?$str[$i].$str[++$i]:$tmpstr=$str[$i];
if ($i>=$start&&$i<($start+$len))$tmp .=$tmpstr;
}
return $tmp;
}//end fun substrGb
/*
*方法 getImg
*功能 上传图片并返回图片名称
*参数 $path 物理路径
*返回 string
*说明 需要upload.php类
*/
function getImg($img,$path){
if(!empty($img)){
require_once("upload.class.php");
foreach($img as $k=>$v){
$u=new phpUpload($v['tmp_name'],$v['name'],$path."upload/images/zixun/");
$u->rndFileName();
$u->size("1000");
$u->type("jpg,gif,jpeg,JPEG");
$res=$u->up();
if($res[0]){
$len=strlen($path)-1;
$imgName=$u->getUsefulRf($len);
return $imgName;
}
else{
$this->errMes[]= "图片".