文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>从phplib修改的mysql操作的类

从phplib修改的mysql操作的类

时间:2007-02-17  来源:PHP爱好者

功能比较强大

我把一些地方改了

还有加了一些函数

非常好的class

<?

class DB_Sql {

var $Host = 'localhost'; //主机名称

var $Database = 'test'; //数据库名称

var $User = 'root'; //用户名

var $Password = '; //用户密码

/* public: configuration parameters */

var $Auto_Free = 0; // 如果非0就自动释放Mysql

var $Debug = 0; // 如果非0就显示调试信息

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 = ';

/* 本MySQL操作库的版本. */

var $type = "mysql";

var $revision = "1.0CVersion";

var $Link_ID = 0;

var $Query_ID = 0;

/* 下面开始过程部分 */

/* 默认连接 */

function DB_SQL($Database = ', $Host = ', $User = ', $Password = ') {

$this->connect($Database, $Host, $User, $Password);

}

/* 返回连接指针 */

function link_id() {

return $this->Link_ID;

}

/* 返回查询指针 */

function query_id() {

return $this->Query_ID;

}

/* 连接MySQL数据库 */

function connect($Database = ', $Host = ', $User = ', $Password = ') {

if (' <> $Database) $this->Database = $Database;

if (' <> $Host) $this->Host = $Host;

if (' <> $User) $this->User = $User;

if (' <> $Password) $this->Password = $Password;

if ( 0 == $this->Link_ID ) {

$this->Link_ID=mysql_pconnect($this->Host, $this->User, $this->Password);

if (!$this->Link_ID) {

$this->halt("MySQLpConnect($this->Host, $this->User, $this->Password) failed.");

return false;

}

if (!@mysql_select_db($this->Database,$this->Link_ID)) {

$this->halt("Cannot use database ".$this->Database);

return false;

}

}

return $this->Link_ID;

}

/* 释放MySQL函数 */

function free() {

@mysql_free_result($this->Query_ID);

$this->Query_ID = 0;

}

/* MySQL查询 */

function query($Query_String) {

if ($Query_String == ') return false;

if (!$this->connect()) return false;

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();

$this->Error = mysql_error();

if (!$this->Query_ID) $this->halt("Invalid SQL: ".$Query_String);

return $this->Query_ID;

}

/* 把结果指针往前推进 */

function next_record() {

if (!$this->Query_ID) {

$this->halt("Next_record called with no query pending.");

return false;

}

$this->Record = @mysql_fetch_array($this->Query_ID);

$this->Errno = mysql_errno();

$this->Error = mysql_error();

$this->Row++;

$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 false;

}

return true;

}

/*----------------------------------------------*

* 锁表格:注意 *

* 本表格可以是一个数组 *

* 如果是数组就会把所有数组元素当作表格来处理 *

*--------------------------------------------- */

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 false;

}

return $res;

}

/* 表格解锁 */

function unlock() {

$this->connect();

$res = @mysql_query("unlock tables");

if (!$res) {

$this->halt("unlock() failed.");

return false;

}

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);

}

/* 返回查询结果中Name字段的值 */

function f($Name) {

return $this->Record[$Name];

}

/* 打印查询结果中Name字段的值 */

function p($Name) {

print $this->Record[$Name];

}

/* 以数组的形式返回查询结果 */

function fetch_array() {

return $this->Record;

}

/* 数据库的信息,原封未动 */

function metadata($table=',$full=false) {

$count = 0;

$id = 0;

$res = array();

/*

* Due to compatibility problems with Table we changed the behavior
* of metadata();

* depending on $full, metadata returns the following values:

*

* - full is false (default):

* $result[]:

* [0]["table"] table name

* [0]["name"] field name

* [0]["type"] field type

* [0]["len"] field length

* [0]["flags"] field flags

*

* - full is true

* $result[]:

* ["num_fields"] number of metadata records

* [0]["table"] table name

* [0]["name"] field name

* [0]["type"] field type

* [0]["len"] field length

* [0]["flags"] field flags

* ["meta"][field name] index of field named "field name"

* The last one is used, if you have a field name, but no index.

* Test: if (isset($result['meta']['myfield'])) { ...

*/

// if no $table specified, assume that we are working with a query

// result

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);

// made this IF due to performance (one if is faster than $count if's)

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;

}

}

// free the result only if we were called on a table

if ($table) @mysql_free_result($id);

return $res;

}

/*-------------------------------------*

* 返回数据库中所有的表格名称,说明: *

* 将返回一个数组,其中包括了所有的表 *

* 格,每个表格是数组的一个元素,每个 *

* 元素又是一个数组,包括了teble_name *

* 和database两个元素,table_name是表 *

* 格的名称,database是数据库的名称。 *

*-------------------------------------*/

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]["database"]=$this->Database;

$i++;

}

return $return;

}

/* 错误信息处理函数,下面都是 */

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 counts($seq_name, $mode = '+') {

$this->connect();

if ($this->lock($this->Seq_Table)) {

$q = sprintf("select num from %s where seq_name = '%s'", $this->Seq_Table, $seq_name);

$id = @mysql_query($q, $this->Link_ID);

$res = @mysql_fetch_array($id);

//如果没有这个row,建立一个

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);

}

if($mode=='+') {

$this->id_add($seq_name);

$count = $res[0]+1;

} else {

$this->id_minus($seq_name);

$count = $res[0]-1;

}

$this->unlock();

} else {

$this->halt("Cannot lock ".$this->Seq_Table." - has it been created?");

return false;

}

return $count;

}

function id_add($seq_name) {

$q = sprintf("update %s set num = num+1 where seq_name = '%s'", $this->Seq_Table, $seq_name);

$current = @mysql_query($q, $this->Link_ID);

return $current;

}

function id_minus($seq_name) {

$q = sprintf("update %s set num = num-1 where seq_name = '%s'", $this->Seq_Table, $seq_name);

$current = @mysql_query($q, $this->Link_ID);

return $current;

}

// Class DB_SQL Ended

}

/*----------------------------------------------------------------------------

id_minus id_add和nextid的用法:

必须建立一个表格,表格名称为Seq_Table的值

其中seq_name代表项目名称,num代表数目

----------------------------------------------------------------------------*/

?>
php爱好者站 http://www.phpfans.net dreamweaver|flash|fireworks|photoshop.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载