先来操作函数部分,普遍的MySQL 函数方法,但随着PHP5的发展,有些函数使用的要求加重了,有些则将废弃不用,有些则参数必填...

===============================================================================================================================

说PHP就不能不提MySQL,而要讲MySQL,那么PHP也是必然要被提起。PHP的迅速崛起,离不开MySQL,而MySQL的广泛应用,也与PHP休戚相关。

下面详细分析PHP4中与MySQL相关操作的函数(共32个,开头都为mysql_):

<1>. 连接数据库服务器(database server)的函数(2个):

(1).mysql_connect()   格式:int mysql_connect(string [hostname] [:port],string [username],string [password]);

参数中的port参数表示数据库服务器的端口号,一般用它的默认端口号就可以了。   如果不填任何参数,则默认的hostname为localhost,username为root,password为空。

函数执行成功,返回一个int 类型的连接号(link_identifier),执行失败,返回false值。      例子:

<?php

$connect = mysql_connect("localhost","user","password");

if($connect) echo "Connect Successed!"; //连接成功,显示Connect Successed!   else echo "Connect Failed!"; //连接失败,显示Connect Failed!

?>

在上例中,如mysql_connect()执行失败,将显示系统的错误提示,而后继续往下执行。那,该如何屏蔽这些系统的错误提示并在失败后结束程序?

在MySQL中,允许在数据库函数之前加上@符号,屏蔽系统的错误提示,同时用die()函数给出更易理解的错误提示,然后die()函数将自动退出程序。

上例可以改为:

<?php

$connect = @mysql_connect("localhost","user","password") or die ("Unable to connect database server!");      ?>

如mysql_connect()执行失败,将显示 Unable to connect database server!后,退出程序。

(2).mysql_pconnect()   格式:int mysql_pconnect(string [hostname] [:port],string [username],string [password]);

此函数与(1)的mysql_connect()基本相同,区别在于:

--------- 当数据库操作结束之后 ,由(1)的mysql_connect()建立的连接将自动关闭,而(2)的mysql_pconnect()建立的连接将继续存在,是一种稳固持久的连接。

--------- 在(2)的mysql_pconnect(),每次连接前,都会检查是否有使用同样的hostname,use,password的连接,如果有,则直接使用这个连接号。

--------- (1)的mysql_connect()建立的连接可以用mysql_close()关闭,而(2)的mysql_pconnect()不能用mysql_close()来关闭。

<2>.关闭数据库连接函数(1个):

mysql_close()   格式:int mysql_close(int link_identifier);

关闭由mysql_connect()函数建立的连接,执行成功,返回ture值,失败则返回false值。      例子如下:

<?php

$connect = @mysql_connect("hostname","user","password") or die("Unable to connect database server!");

$close = @mysql_close($connect) or die ("Unable to close database server connect!");

?>

注:mysql_close()不能关闭由mysql_pconnect()函数建立的连接。

<3>.选择数据库函数(1个):

mysql_select_db()

格式:int mysql_select_db(string database name , int link_identifier);

选择指定的database name ,成功,返回1个真值(True),失败,则返回1个False值。      例子1:

<?php

$select = mysql_select_db('forum' , $connect);

if($select)   {echo "connect db forum successed!";}

else   {echo "connect db forum failed!";}

?>

例子2:

<?php

$select = mysql_select_db("forum",$connect) or die("Can not connect this DB!");

?>

注:此函数相当于在MySQL中的USE语句:如 USE forum

<4>.SQL查询函数(2个):

1、mysql_query()

格式:int mysql_query(string sqlquery , int link_identifier);

向服务器发一段标准SQL语句请求。如果失败,则返回一False值。

例子:

<?php

$connect = mysql_connect($hostname,$user,$pwd);

$select = mysql_select_db($dbname,$connect);

$query = mysql_query($sql , $connect);

if($query) echo "Successed !";

else echo "Failed !";

?>

此函数一定要与mysql_select_db()函数配合使用,单独使用它就没有意义了!

2、mysql_db_query()

格式:int mysql_db_query(string database , string sqlquery , int link_identifier);

在此函数中必须指定数据库名database和SQL语句sqlquery,如失败则返回False。

例子:

<?php

$connect = mysql_connect($hostname , $user , $pwd);

$query = mysql_db_query($dbname , $sql , $connect);

if($query) echo "Successed !";

else echo "Failed !";

?>

mysql_db_query()与mysql_query()的区别就在于前者可以不用使用mysql_select_db()来选择数据库database,而在执行SQL语句的同时,进行选择数据库。

<5>.数据库记录操作函数(5个):

1、mysql_fetch_array()

格式:array mysql_fetch_array(int query);

执行成功,返回1个数组,该数组保存有下一条记录的值,如执行失败,则返回False值。

返回的数组既可以用下标来表示,也可以用字段名来表示。

例子:

<?php

$query = mysql_query($sql , $connect);

while($arrary = mysql_fetch_array($query))

{

echo $array[column1]." | ".$array[column2];   //echo $array[0]." | ".$array[1];

}

?>

Note : 数组的下标是从0开始的!

2、mysql_fetch_row()

格式:array = mysql_fetch_row(int query);

与1的mysql_fetch_array()函数功能基本相同。区别在于mysql_fetch_row()只能以数组下标来表示。

成功返回1个数组,失败返回False值。

例子:

<?php

$query = mysql_query($sql , $connect);

while($row = mysql_fetch_row($query))

{

echo $row[0] . " | " . $row[1] . "<br>";   }

?>

Note : mysql_fetch_row()函数只能用数组下标来表示,并从0开始。

另:mysql_fetch_row()比mysql_fetch_array()执行速度快,并且都是对下一行数据进行读取。

3、mysql_result()

格式:int mysql_result(int query , int row , string filedname);

在mysql_result()中,参数row必须从0开始,参数filedname必须是真实的字段名,不能用下标来表示。

执行成功,返回由数据库中取出的字段的数值,失败则返回False值。

例子:

<?php

$query = mysql_query($sql , $connect);

echo mysql_result($query , 0 , "column1")."<br>";

echo mysql_result($query , 1, "column1")."<br>";

echo mysql_result($query , 2, "column1")."<br>";

?>      Note : 此函数功能少,但使用方便。

4、mysql_fetch_object()

格式: object mysql_fetch_object(int query)

能对指定的字段进行循环读取,执行成功,将以对象object的形式返回数值,失败则返回False值。

例子:

<?php

$query = mysql_query($sql , $connect);

while($object = mysql_fetch_object($query))

{

echo $object->column1 . "<br>";

echo $object->column2 . "<br>";

echo $object->column3 . "<br>";

}

?>

Note : mysql_fetch_object()函数执行成功后返回的是1个对象object !

操作如下:   $object->字段名

5、mysql_data_seek()

格式:int mysql_data_seek(int row , int query);

移动游标到指定的行(row_number)

执行成功,返回真值,失败,返回False值。

此函数可以与mysql_fetch_array()或mysql_fetch_row()配合使用,即在使用mysql_data_seek()函数之后,就可以用mysql_fetch_array()或mysql_fetch_row()函数来显示指定的行了。

例子:

<?php

$query = mysql_query($sql , $connect);

$seek = mysql_data_seek($query , 2);

$arrary = mysql_fetch_array($query);

echo $array[column1]."<br>";

echo $array[column2]."<br>";

?>

<6>.数据库级database的操作函数(2个):

1、mysql_create_db()

格式:int mysql_create_db(string database name , int link_identifier);

通过程序来建立1个数据库database,当然你也可以用mysql_query()或者mysql_db_query()函数来建立或删除database

但我们可以用这个函数更为方便地建立1个database。

成功返回1个真值,失败,则返回1个false。

例子:

<?php

$connect = mysql_connect("$hostname","$user","$pwd");

$create = mysql_create_db("dbtest" , $connect);

if($create) echo "create database dbtest successed!";

else echo "create database dbtest failed!";

?>

2、mysql_drop_db()

格式:int mysql_drop_db(string database name , int link_identifier);

通过程序来删除1个数据库database。

但我们可以用这个函数更为方便地删除1个database。

成功返回1个真值,失败,则返回1个false。

例子:

<?php

$connect = mysql_connect("$hostname","$user","$pwd");

$create = mysql_drop_db("dbtest" , $connect);

if($create) echo "drop database dbtest successed!";

else echo "drop database dbtest failed!";

?>

Note : 如用mysql_query()或mysql_db_query(),则SQL语句应为:

(1)create database dbtest

(2)drop database dbtest

(7) 数据库信息函数(2个):

1、mysql_fetch_field()

格式:object mysql_fetch_field(int query , int [field_offset]);

返回1个对象,即一哈希表,下标有:

table : 表名   name : 字段名   max_length : 该字段的最大长度

not_null : 字段为not null则返回1,否则返回0

primary_key : 字段为primary key则返回1,否则返回0

unique_key : 字段为unique key则返回1,否则返回0

multiple_key : 字段为非unique key则返回1,否则返回0

numeric : 字段为numeric则返回1,否则返回0

blob : 字段为blob则返回1,否则返回0

type : 字段的类型   unsigned : 字段为unsigned则返回1,否则返回0

zerofill : 字段为zero filled则返回1,否则返回0

引用格式为:对象名->下标名

使用此函数可以得到表名、字段名、类型.......

例子:

<?php

$query = mysql_query($sql , $connect);

while($object = mysql_fetch_field($query))

{

echo "table name : ".$object->table."<br>";

echo "field name : ".$object->name."<br>";

echo "primary key : ".$object->primary_key."<br>";

echo "not null : ".$object->not_null."<br>";

echo "field type : ".$object->type."<br>";

echo "field max length : ".$object->max_length."<br>";

}

?>

Note : 哈希表的是从0坐标开始的,即第一个字段为哈希表中的0项。

如果我们想直接得到哈希表的第三项即第三个字段的信息,可用如下格式:

<?php

$query = mysql_query($sql , $connect);

$object = mysql_fetch_field($query , 2);

echo "table name : ".$object->table."<br>";

echo "field name : ".$object->name."<br>";

echo "primary key : ".$object->primary_key."<br>";

echo "not null : ".$object->not_null."<br>";

echo "field type : ".$object->type."<br>";

echo "field max length : ".$object->max_length."<br>";

?>

其实这也可以通过下面这个函数来达到同样的目的。

2、mysql_field_seek()

格式:int mysql_field_seek(int $query , int field_offset);

将游标移到指定的字段上。

例子:

<?php

$query = mysql_query($sql , $connect);

$seek = mysql_field_seek($query , 2);

$object = mysql_fetch_field($query);

echo "table name : ".$object->table."<br>";

echo "field name : ".$object->name."<br>";

echo "primary key : ".$object->primary_key."<br>";

echo "not null : ".$object->not_null."<br>";

echo "field type : ".$object->type."<br>";

echo "field max length : ".$object->max_length."<br>";

?>

这样也达到与上例同样的要求。

(8) 取数据库名和表名(2个):

1、mysql_list_dbs()

格式: int mysql_list_dbs(int link_identifier);

取得所有可用的数据库名(database name)。

例子:

<?php

$connect = mysql_connect($host , $usr ,$pwd);

$dbs = mysql_list_dbs($connect);

$rows = mysql_num_rows($dbs);

echo "database total : ".$rows;

$i = 0;

while($i<$rows)

{

$db_name[$i] = mysql_tablename($dbs , $i);

echo $db_name[$i];   $i++;   }

?>

即可依次显示出MySQL中所有的数据库名字(database name )。

Note : 相当于MySQL中的 show databases命令

2、mysql_list_tables()

格式:int mysql_list_tables(string database name);

显示该数据库下所有的表的名字Table name。

例子:

<?php

$connect = mysql_connect($host , $usr , $pwd);

$tables = mysql_list_tables("mysql");

$rows = mysql_num_rows($tables);

echo "Table total : ".$rows;   $i = 0;

while($i<$rows)

{

$table_name[$i] = mysql_tablename($tables , $i);

echo $table_name[$i];   $i++;   }

?>

即可依次显示出mysql下所有的表的名字

Note : 相当于MySQL中的 show tables命令(先要用 use mysql命令选中1个数据库)

======================================================================================================================

======================================================================================================================

再来一些mysqli 对象形式部分

PHP的 mysqli 扩展提供了其先行版本的所有功能,此外,由于 MySQL 已经是一个

具有完整特性的数据库服务器 , 这为PHP 又添加了一些新特性 。 而 mysqli 恰恰也支持了

这些新特性。

一. 建立和断开连接

与 MySQL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并

选择一个数据库 , 以及最后关闭连接 。与 mysqli 几乎所有的特性一样 , 这一点可以使用面向

对象的方法来完成,也可以采用过程化的方式完成。

1. 创建一个 mysqli 的对象

$_mysqli = newmysqli();

2. 连接 MySQL的主机、用户、密码、数据库

$_mysqli->connect( 'localhost' , 'root' , 'yangfan' , 'guest' );

3. 创建带连接参数的 mysqli对象

$_mysqli = newmysqli( 'localhost' , 'root' , 'yangfan' , 'guest' );

4. 单独选择数据库

$_mysqli->select_db( 'testguest' );

5. 断开 MySQL

$_mysqli->close();

二. 处理连接错误

如果无法连接 MySQL数据库,那么这个页面不太可能继续完成预期的工作。因此,一

定要注意监视连接错误并相应地做出反应 。Mysqli 扩展包含有很多特性可以用来捕获错误信

息,例如:mysqli_connect_errno() 和 mysqli_connect_error() 方法。

mysqli_connect_errno()函数返回连接数据库返回的错误号。

Mysqli_connect_error()函数返回连接数据库返回的错误代码。

if(mysqli_connect_errno()) {

echo' 数据库连接错误,错误信息: ' .mysqli_connect_error();

exit();

}

errno属性返回数据库操作时的错误号。

error属性返回数据库操作时的错误代码。

if( $_mysqli ->errno) {

echo' 数据库操作时发生错误,错误代码是: ' . $_mysqli ->error;

}

三. 与数据库进行交互

绝大多数查询都与创建(Creation) 、获取 (Retrieval) 、更新 (Update) 和删除 (Deletion) 任

务有关,这些任务统称为 CRUD 。

1. 获取数据

网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送

SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。

// 设置一下编码 utf8

$_mysqli->set_charset( "utf8" );

// 创建一句 SQL 语句

$_sql = "SELECT* FROM t g_user" ;

// 执行 sql 语句把结果集赋给$_result

$_result = $_mysqli->query( $_sql );

// 将结果集的第一行输出

print_r( $_result->fetch_row());

// 释放查询内存 ( 销毁 )

$_result->free();

2. 解析查询结果

一旦执行了查询并准备好结果集 ,下面就可以解析获取到的结果行了 。 你可以使用多个

方法来获取各行中的字段 ,具体选择哪一个方法主要取决于个人喜好 , 因为只是引用字段的

方法有所不同。

将结果集放到对象中

由于你可能会使用 mysqli的面向对象的语法 , 所以完全可以采用面向对象的方式管理结

果集。可以使用fetch_object() 方法来完成。

// 将结果集包装成对象

$_row = $_reslut->fetch_object();

// 输出对象中的一个字段(属性)

echo $_row->tg_username;

// 遍历所有的用户名称

while (!! $_row =$_reslut ->fetch_object()) {

echo$_row ->tg_username. ' <br /> ' ;

}

使用索引数组和关联数组

// 将结果集包装成数组 ( 索引 +关联 )

$_row = $_reslut->fetch_array();

// 输出下标是 3 的字段(属性)

echo $_row [ 3 ];

// 将结果集包装成索引数组

$_row = $_reslut->fetch_row();

echo $_row [ 3 ];

// 将结果集包装成关联数组

$_row = $_reslut->fetch_assoc();

echo $_row ['tg_username' ];

3. 确定所选择的行和受影响的行

通常希望能够确定 SELECT查询返回的行数 , 或者受 INSERT 、 UPDATE 或 DELET 查询

影响的行数。我们可以使用num_rows 和 affected_rows 两个属性

// 当使用查询时,想了解 SELECT查询了多少行,可以使用 num_rows 。

echo $_reslut->num_rows;

// 当使用查询时 , 想了解SELECT 、 INSERT 、 UPDATE 、 DELETE 查询时影响的行

数,可以使用affected_rows; 注意,它是 $_mysqli 下的属性

echo $_mysqli->affected_rows;

4. 移动指针的操作和获取字段

当你并不想从第一条数据开始获取 ,或者并不想从第一个字段获取 , 你可以使用数据指

针移动或者字段指针移动的方式调整到恰当的位置。 当然 , 你还可以获取字段的名称及其相

关的属性。

// 计算有多少条字段

echo $_reslut->field_count;

// 获取字段的名称

$_field = $_reslut->fetch_field();

echo $_field->name;

// 遍历字段

while (!! $_field =$_reslut ->fetch_field()) {

echo$_field ->name. '<br />' ;

}

// 一次性取得字段数组

print_r( $_reslut->fetch_fields());

// 移动数据指针

$_reslut->data_seek( 5 );

// 移动字段指针

$_reslut->field_seek( 2 );

5. 执行多条 SQL 语句

有的时候 ,我们需要在一张页面上同时执行多条 SQL 语句 , 之前的方法就是分别创建多

个结果集然后使用。但这样资源消耗很大,也不利于管理。PHP 提供了执行多条 SQL 语句

的方法 $_mysqli->multi_query() ;

// 创建多条 SQL 语句

$_sql .="SELECT * FROM tg_user;" ;

$_sql .="SELECT * FROM tg_photo;" ;

$_sql .="SELECT * FROM tg_article" ;

// 开始执行多条 SQL 语句

if ( $_mysqli->multi_query( $_sql )) {

//开始获取第一条 SQL 语句的结果集

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

//将结果集指针移到下一个

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

$_mysqli->next_result();

$_result= $_mysqli ->store_result();

print_r($_result ->fetch_array());

} else {

echo'sql 语句有误! ' ;

}

6. 执行数据库事务

事务 (transaction)是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操

作都成功 , 则认为事务成功 ,即使只有一个失败操作 , 事务也不成功 。 如果所有操作成功完

成 , 事务则提交 (commit) ,其修改将作用于所有其他数据库进程 。 如果一个操作失败 , 则事

务将回滚 (roll back),该事务所有操作的影响都将取消。

首先 , 您的 MySQL 是InnoDB 或 BDB 引擎的一种 , 一般来说 , 你安装了 AppServ 的集成

包 , 你选择 InnoDB的引擎的数据库即可 。 如果你建立的表不是 InnoDB , 可以在 phpmyadmin

里修改。

// 首先你必须关闭自动提交数据

$_mysqli->autocommit( false );

// 创建一个 SQL 语句,必须同时运行成功,不能出现一个成功,一个失败

$_sql .="UPDATE tg_friend SET tg_state=tg_state+5 WHERE tg_id=1;" ;

$_sql .="UPDATE tg_flower SET tg_flower=tg_flower-5 WHERE tg_id=1;" ;

// 执行两条 SQL 语句

if ( $_mysqli->multi_query( $_sql )) {

//获取第一条 SQL 一影响的行数

$_success= $_mysqli ->affected_rows == 1 ? true : false ;

//下移,第二条 SQL

$_mysqli->next_result();

//获取第二条 SQL 影响的行数

$_success2 = $_mysqli ->affected_rows == 1 ? true : false ;

//判断是否都正常通过了,两个 SQL

if( $_success && $_success2 ) {

$_mysqli->commit();

echo' 完美提交! ' ;

}else {

$_mysqli->rollback();

echo' 程序出现异常! ' ;

}

}

} else {

echo"SQL 语句有误: " . $_mysqli ->errno. $_mysqli ->error;

}

// 最后还必须开启自动提交

$_mysqli->autocommit( true );

===============================================================================================================================

===============================================================================================================================

其次是mysql 类操作方法,附上代码片..

  1. <?php
  2. class DummyMySQLClass{
  3.  
  4. var $DBHost = ''; /* 数据库主机名称 */
  5. var $DBUser = ''; /* 数据库用户名称 */
  6. var $DBPswd = ''; /* 数据库密码 */
  7. var $DBName = ''; /* 数据库名称 */
  8.  
  9. var $Result = NULL; /* private */
  10. var $LinkId = NULL; /* private */
  11. var $Record = NULL; /* 包含一条记录的内容 */
  12. var $Rows = 0;
  13.  
  14. var $MustBeHalt = true; /* 有了错误立即停止 */
  15. var $RecordCase = NULL; /* 只在 nextRecord() 和 f()方法里出现 */
  16.  
  17. function DummyMySQLClass($DBHost = '', $DBUser = '', $DBPswd = '', $DBName = '', $newLink = false){
  18. if(is_array($DBHost)){
  19. $DBHost = $DBHost[0];
  20. $DBUser = $DBHost[1];
  21. $DBPswd = $DBHost[2];
  22. $DBName = $DBHost[3];
  23. $newLink = empty($DBHost[4])?false:$DBHost[4];
  24. }elseif(str_replace(array("/", "@"), array("", ""), $DBHost) != $DBHost){
  25. $dsn = $this->splitDSN($DBHost);
  26.  
  27. $DBTpye = $dsn[0];
  28. $DBHost = $dsn[1].":".$dsn[2];
  29. $DBUser = $dsn[3];
  30. $DBPswd = $dsn[4];
  31. $DBName = $dsn[5];
  32. $newLink = $dsn[6] == ''?$newLink:$dsn[6];
  33. }
  34. $this->DBHost = empty($DBHost)?$this->DBHost:$DBHost;
  35. $this->DBUser = empty($DBUser)?$this->DBUser:$DBUser;
  36. $this->DBPswd = empty($DBPswd)?$this->DBPswd:$DBPswd;
  37. $this->DBName = empty($DBName)?$this->DBName:$DBName;
  38.  
  39. if(!empty($DBHost)){
  40. $this->connect($this->DBHost, $this->DBUser, $this->DBPswd, $newLink);
  41. }
  42. if(!empty($DBName)){
  43. $this->selectDB($DBName);
  44. }
  45. }
  46.  
  47. function splitDSN($dsn){
  48. //$dsn = "数据库类型名称://入口帐号:入口密码@数据库主机名:端口号/数据库名/是否总是打开新的连接";
  49. //$dsn = "MySQL://Dummy:123@localhost:3306/tetx/false";
  50. $dsn = preg_split("/[://@]/", $dsn);
  51.  
  52. $DBTpye = '';
  53. $DBHost = '';
  54. $DBPort = '';
  55. $DBUser = '';
  56. $DBPswd = '';
  57. $DBName = '';
  58. $DBNewLink = false;
  59.  
  60. $DBTpye = $dsn[0];
  61. $DBHost = $dsn[5];
  62. $DBPort = $dsn[6];
  63. $DBUser = $dsn[3];
  64. $DBPswd = $dsn[4];
  65. $DBName = $dsn[7];
  66. $DBNewLink = $dsn[8];
  67.  
  68. return array($DBTpye, $DBHost, $DBPort, $DBUser, $DBPswd, $DBName, $DBNewLink);
  69. }
  70.  
  71. function affectedRows(){ /* 取得前一次 MySQL 操作所影响的记录行数 */
  72. return mysql_affected_rows($this->LinkId);
  73. }
  74.  
  75. function changeUser($user, $password){ /* 改变活动连接中登录的用户 */
  76. return mysql_change_user($user, $password, $this->DBName, $this->LinkId);
  77. }
  78.  
  79. function clientEncoding(){ /* 返回字符集的名称 */
  80. return mysql_client_encoding($this->LinkId);
  81. }
  82.  
  83. function close(){ /* 关闭 MySQL 连接 */
  84. $close = mysql_close($this->LinkId);
  85. $this->LinkId = NULL;
  86. $this->Result = NULL;
  87. $this->Record = NULL;
  88. return $close;
  89. }
  90.  
  91. function connect($DBHost = '', $DBUser = '', $DBPswd = '', $newLink = false){//, int client_flags){ /* 打开一个到 MySQL 服务器的连接 */
  92. $connect = @mysql_connect(empty($DBHost)?$this->DBHost:$DBHost, empty($DBUser)?$this->DBUser:$DBUser, empty($DBPswd)?$this->DBPswd:$DBPswd, $newLink);
  93. if(!is_resource($connect)){
  94. $this->halt("连接数据库失败!", 1);
  95. return false;
  96. }
  97. $this->LinkId = $connect;
  98. return true;
  99. }
  100.  
  101. function createDB($DBName){ /* 新建一个 MySQL 数据库 */
  102. return @mysql_create_db($DBName, $this->LinkId) or die($this->halt("创建数据库 ".$DBName." 失败!"));
  103. }
  104.  
  105. function dataSeek($rowNumber){ /* 移动内部结果的指针 */
  106. return mysql_data_seek($this->Result, $rowNumber);
  107. }
  108.  
  109. function dbName($row, $field = NULL){ /* 取得结果数据 */
  110. if(empty($field)){
  111. return mysql_db_name($this->Result, $row);
  112. }
  113. return mysql_db_name($this->Result, $row, $field);
  114. }
  115.  
  116. function dbQuery($DBName, $queryString){ /* 发送一条 MySQL 查询 */
  117. $this->Result = mysql_db_query($DBName, $queryString, $this->LinkId);
  118. return $this->Result?true:false;
  119. }
  120.  
  121. function dropDB($DBName){ /* 丢弃(删除)一个 MySQL 数据库 */
  122. return mysql_drop_db($DBName, $this->LinkId);
  123. }
  124.  
  125. function errno(){ /* 返回上一个 MySQL 操作中的错误信息的数字编码 */
  126. return mysql_errno($this->LinkId);
  127. }
  128.  
  129. function error(){ /* 返回上一个 MySQL 操作产生的文本错误信息 */
  130. return mysql_error($this->LinkId);
  131. }
  132.  
  133. function escapeString($unescapedString){ /* 转义一个字符串用于 mysql_query */
  134. return mysql_escape_string($unescapedString);
  135. }
  136.  
  137. function fetchArray($Rows = 0, $resultType = MYSQL_BOTH){ /* 从结果集中取得一行作为关联数组,或数字数组,或二者兼有 */
  138. if(!is_resource($this->Result)){
  139. return false;
  140. }
  141. $fetchArray = mysql_fetch_array($this->Result, $resultType);
  142. if($fetchArray && $Rows){$this->Rows++;}
  143. return $fetchArray;
  144. }
  145.  
  146. function fetchAssoc($Rows = 0){ /* 从结果集中取得一行作为关联数组 */
  147. if(!is_resource($this->Result)){
  148. return false;
  149. }
  150. $fetchAssoc = mysql_fetch_assoc($this->Result);
  151. if($fetchAssoc && $Rows){$this->Rows++;}
  152. return $fetchAssoc;
  153. }
  154.  
  155. function fetchField($fieldOffset = NULL){ /* 从结果集中取得列信息并作为对象返回 */
  156. if(empty($fieldOffset)){
  157. return mysql_fetch_field($this->Result, $fieldOffset);
  158. }
  159. return mysql_fetch_field($this->Result);
  160. }
  161.  
  162. function fetchLengths(){ /* 取得结果集中每个输出的长度 */
  163. return mysql_fetch_lengths($this->Result);
  164. }
  165.  
  166. function fetchObject($Rows = 0){ /* 从结果集中取得一行作为对象 */
  167. if(!is_resource($this->Result)){
  168. return false;
  169. }
  170. $fetchObject = mysql_fetch_object($this->Result);
  171. if(is_object($fetchObject) && $Rows){$this->Rows++;}
  172. return is_object($fetchObject)?$fetchObject:false;
  173. }
  174.  
  175. function fetchRow($Rows = 0){ /* 从结果集中取得一行作为枚举数组 */
  176. if(!is_resource($this->Result)){
  177. return false;
  178. }
  179. $fetchRow = mysql_fetch_row($this->Result);
  180. if($fetchRow && $Rows){$this->Rows++;}
  181. return $fetchRow;
  182. }
  183.  
  184. function fieldFlags($fieldOffset){ /* 从结果中取得和指定字段关联的标志 */
  185. return mysql_field_flags($this->Result, $fieldOffset);
  186. }
  187.  
  188. function fieldLen($fieldOffset){ /* 返回指定字段的长度 */
  189. return mysql_field_len($this->Result, $fieldOffset);
  190. }
  191.  
  192. function fieldName($fieldIndex){ /* 取得结果中指定字段的字段名 */
  193. return mysql_field_name($this->Result, $fieldIndex);
  194. }
  195.  
  196. function fieldSeek($fieldOffset){ /* 将结果集中的指针设定为制定的字段偏移量 */
  197. return mysql_field_seek($this->Result, $fieldOffset);
  198. }
  199.  
  200. function fieldTable($fieldOffset){ /* 取得指定字段所在的表名 */
  201. return mysql_field_table($this->Result, $fieldOffset);
  202. }
  203.  
  204. function fieldType($fieldOffset){ /* 取得结果集中指定字段的类型 */
  205. return mysql_field_type($this->Result, $fieldOffset);
  206. }
  207.  
  208. function freeResult(){ /* 释放结果内存 */
  209. return mysql_free_result($this->Result);
  210. }
  211.  
  212. function getClientInfo(){ /* 取得 MySQL 客户端信息 */
  213. return mysql_get_client_info();
  214. }
  215.  
  216. function getHostInfo(){ /* 取得 MySQL 主机信息 */
  217. return mysql_get_host_info($this->LinkId);
  218. }
  219.  
  220. function getProtoInfo(){ /* 取得 MySQL 协议信息 */
  221. return mysql_get_proto_info($this->LinkId);
  222. }
  223.  
  224. function getServerInfo(){ /* 取得 MySQL 服务器信息 */
  225. return mysql_get_server_info($this->LinkId);
  226. }
  227.  
  228. function info(){ /* 取得最近一条查询的信息 */
  229. return mysql_info($this->LinkId);
  230. }
  231.  
  232. function insertId(){ /* 取得上一步 INSERT 操作产生的 ID */
  233. return mysql_insert_id($this->LinkId);
  234. }
  235.  
  236. function listDBs(){ /* 列出 MySQL 服务器中所有的数据库 */
  237. $this->Result = mysql_list_dbs($this->LinkId);
  238. return $this->Result?true:false;
  239. }
  240.  
  241. function listFields($DBName, $tableName){ /* 列出 MySQL 结果中的字段 */
  242. $this->Result = mysql_list_fields($DBName, $tableName, $this->LinkId);
  243. return $this->Result?true:false;
  244. }
  245.  
  246. function listProcesses(){ /* 列出 MySQL 进程 */
  247. $this->Result = mysql_list_processes($this->LinkId);
  248. return $this->Result?true:false;
  249. }
  250.  
  251. function listTables($DBName = ''){ /* 列出 MySQL 数据库中的表 */
  252. $DBName = empty($DBName)?$this->DBName:$DBName;
  253. $this->Result = mysql_list_tables($DBName, $this->LinkId);
  254. return $this->Result?true:false;
  255. }
  256.  
  257. function numFields(){ /* 取得结果集中字段的数目 */
  258. return mysql_num_fields($this->Result);
  259. }
  260.  
  261. function numRows(){ /* 取得结果集中行的数目 */
  262. return mysql_num_rows($this->Result);
  263. }
  264.  
  265. function pconnect($DBHost = '', $DBUser = '', $DBPswd = ''){ /* 打开一个到 MySQL 服务器的持久连接 */
  266. $connect = @mysql_pconnect(empty($DBHost)?$this->DBHost:$DBHost, empty($DBUser)?$this->DBUser:$DBUser, empty($DBPswd)?$this->DBPswd:$DBPswd);
  267. if(!is_resource($connect)){
  268. $this->halt("连接数据库失败!",1);
  269. return false;
  270. }
  271. $this->LinkId = $connect;
  272. return true;
  273. }
  274.  
  275. function ping(){ /* Ping 一个服务器连接,如果没有连接则重新连接 */
  276. return mysql_ping($this->LinkId);
  277. }
  278.  
  279. function query($queryString){ /* 发送一条 MySQL 查询 */
  280. if(empty($queryString)){
  281. $this->halt("SQL 语句为空!", 1);
  282. return false;
  283. }
  284. if(!is_resource($this->LinkId)){
  285. $this->halt("请先确保数据库已经连接上!", 1);
  286. return false;
  287. }
  288. $this->Result = mysql_query($queryString, $this->LinkId);// or die(mysql_error());//print_r($this);
  289. return $this->Result?true:false;
  290. }
  291.  
  292. function realEscapeString($unescapedString){ /* 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 */
  293. return mysql_real_escape_string($unescapedString, $this->LinkId);
  294. }
  295.  
  296. function result($row, $field = NULL){ /* 取得结果数据 */
  297. if(empty($field)){
  298. return mysql_result($this->Result, $row, $field);
  299. }
  300. return mysql_result($this->Result, $row);
  301. }
  302.  
  303. function selectDB($DBName = 'test'){ /* 选择 MySQL 数据库 */
  304. return mysql_select_db(empty($DBName)?$this->$DBName:$DBName, $this->LinkId);
  305. }
  306.  
  307. function stat(){ /* 取得当前系统状态 */
  308. return mysql_stat($this->LinkId);
  309. }
  310.  
  311. function tablename($index){ /* 取得表名 */
  312. return mysql_tablename($this->Result, $index);
  313. }
  314.  
  315. function threadId(){ /* 返回当前线程的 ID */
  316. return mysql_thread_id($this->LinkId);
  317. }
  318.  
  319. function unbufferedQuery($queryString){ /* 向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行 */
  320. $this->Result = mysql_unbuffered_query($queryString,$this->LinkId);
  321. return $this->Result?true:false;
  322. }
  323. /*-- 上面的方法名跟手册上 MySQL 的那些函数名是一对一的,除了“splitDSN”和“构造函数” --*/
  324. /*-- 下面是扩展,也就是说下面的这些方法在手册上是找不到影子的 --*/
  325. function free(){ /* 释放结果内存,效果 freeResult 一样,只是这样简单些,少写几个字母,算是别名吧~ ^_^ */
  326. return $this->freeResult();
  327. }
  328.  
  329. function setMustBeHalt($MustBeHalt = false){
  330. $this->MustBeHalt = $MustBeHalt;
  331. }
  332.  
  333. function getMustBeHalt(){
  334. return $this->MustBeHalt;
  335. }
  336. /* 以下是支持事物扩展 */
  337. function setAutoCommit($AutoCommit = 1){ /* 默认为不支持事务 */
  338. mysql_query("SET AUTOCOMMIT = ".$AutoCommit);
  339. }
  340.  
  341. function begin(){ /* 事务开始 */
  342. @mysql_query("LOCK TABLES");
  343. @mysql_query("UNLOCK TABLES");
  344. $this->setAutoCommit(0);
  345. mysql_query("BEGIN");
  346. }
  347.  
  348. function rollback(){ /* 回滚,继续默认的不支持事务 */
  349. mysql_query("ROLLBACK");
  350. @mysql_query("UNLOCK TABLES");
  351. $this->setAutoCommit(1);
  352. }
  353.  
  354. function commit(){ /* 事务结束,继续默认的不支持事务 */
  355. mysql_query("COMMIT");
  356. @mysql_query("UNLOCK TABLES");
  357. $this->setAutoCommit(1);
  358. }
  359. /* 以上是支持事物扩展 */
  360. function getRows(){ /* 取得已经读出的数据记录数 */
  361. return $this->Rows;
  362. }
  363.  
  364. function getDBName(){
  365. return $this->DBName;
  366. }
  367.  
  368. function nextRecord($resultType = 0){ /* 跟 phplib 接轨,同 phplib 的 next_record */
  369. $record = NULL;
  370. switch($resultType){
  371. case 1:
  372. $record = @mysql_fetch_assoc($this->Result);
  373. $this->RecordCase = 1;
  374. break;
  375. case 2:
  376. $record = @mysql_fetch_row($this->Result);
  377. $this->RecordCase = 2;
  378. break;
  379. case 3:
  380. $record = @mysql_fetch_object($this->Result);
  381. $this->RecordCase = 3;
  382. break;
  383. default:
  384. $record = @mysql_fetch_array($this->Result);
  385. $this->RecordCase = 0;
  386. break;
  387. }
  388. if(is_resource($record)){
  389. $this->Record = $record;
  390. }else{
  391. return false;
  392. }
  393. }
  394.  
  395. function f($fieldName){ /* 跟 phplib 接轨 */
  396. switch($this->RecordCase){
  397. case 3:
  398. return is_object($this->Record)?$this->Record->$fieldName:NULL;
  399. break;
  400. default:
  401. return $this->Record[$fieldName];
  402. break;
  403. }
  404. }
  405. /* 下面的自己可以定义格式 */
  406. function halt($msg = "未知错误!", $MustBeHalt = 0){
  407. echo $msg;
  408. if($MustBeHalt !== 0 || $this->getMustBeHalt()){
  409. die();
  410. }
  411. }
  412. /* 下面的可要可不要,因为得PHP5才行 */
  413. function __get($nm){
  414. if(isset($this->$nm)){
  415. //
  416. }else{
  417. $this->halt("没有的成员变量 :$nm/n",1);
  418. }
  419. }
  420.  
  421. function __set($nm, $val){
  422. //
  423. }
  424.  
  425. function __call($m, $a){
  426. print "<hr>调用不存在的方法——".$m."(".join(",",$a).")!/n";
  427. echo '<pre>';
  428. var_dump($a);
  429. echo '</pre>';
  430. $this->halt("<hr>");
  431. }
  432.  
  433. } // End DummyMySQLClass
  434. ?>
  435. <?php
  436. /**
  437. function __autoload($className) {
  438. include_once $className . ".php";
  439. }
  440. $DMC = new DummyMySQLClass("localhost","root","","test");
  441. //print_r($DMC);
  442.  
  443. */
  444. //---------------------------------------------------------
  445. //---------------------------------------------------------
  446.  
  447. //---------------------------------------------------------
  448. /**4
  449. $DMC->query("SELECT * FROM `purchase_product` LIMIT 1");
  450. while($fetchObject = $DMC->fetchObject(3)){
  451. echo $DMC->fieldName(0).'<br>'; // 效果如:ID
  452. echo $DMC->fieldType(0).'<br>';
  453. echo $DMC->fieldLen(0).'<br>'; // 效果如:9
  454. print_r($DMC->fieldFlags(0)); // 效果如:not_null primary_key auto_increment
  455. echo '<hr>合起来的效果:<br>';
  456. echo '`'.$DMC->fieldName(0).'` '.$DMC->fieldType(0).'('.$DMC->fieldLen(0).') '.str_replace(array("NOT_NULL","PRIMARY_KEY"),array("NOT NULL","PRIMARY KEY"),strtoupper($DMC->fieldFlags(0))).",/n<br>";
  457. }
  458. //下面这是秘籍!!^_^
  459. $DMC->query("show create table `purchase_product`");
  460. while($fetchObject = $DMC->fetchObject(3)){
  461. $t = 'Create Table';print_r($fetchObject->$t);
  462. }
  463. */
  464. //---------------------------------------------------------
  465. /**4
  466. echo "getHostInfo() --- ".$DMC->getHostInfo().'<br>';
  467. echo "getClientInfo() - ".$DMC->getClientInfo().'<br>';
  468. echo "getProtoInfo() -- ".$DMC->getProtoInfo().'<br>';
  469. echo "getServerInfo() - ".$DMC->getServerInfo().'<br>';
  470. echo "info() ---------- ".$DMC->info().'<br>';
  471. */
  472. //---------------------------------------------------------
  473. /**3
  474. //取得指定库的所有表
  475. $DMC->listTables("test");
  476. while($row = $DMC->fetchRow()){
  477. print "Table: ".$row[0]."/n";
  478. }
  479. //下面for的效果跟上面while的一样
  480. for ($i = 0; $i < $DMC->numRows(); $i++){
  481. printf ("Table: %s/n", $DMC->tablename($i));
  482. }
  483. */
  484. //---------------------------------------------------------
  485. /**2
  486. //数据查询
  487. $DMC->query("SELECT * FROM `purchase_product` LIMIT 1");
  488. while($fetchObject = $DMC->fetchObject(3)){
  489. print_r($fetchObject);
  490. print_r($DMC->fetchLengths()); // 是记录的长度,不是字段的长度
  491. //print_r($DMC);
  492. }
  493. */
  494. //---------------------------------------------------------
  495. /**1
  496. // 取得指定库指定表名称的字段
  497. $DMC->listFields("test","purchase_product");
  498. $a = $DMC->numFields();
  499. for($i=0; $i<$a; $i++){
  500. echo $DMC->fieldName($i).' ';
  501. }
  502. */
  503. /////////////////////////////////////////////////
  504. // //
  505. // 环境:PHP5.0.2 + APACHE:2.0.52 +Win2Kp_sp4 //
  506. // //
  507. /////////////////////////////////////////////////
  508. ?>

================================待续======================================

在PHP中使用MySQL Mysqli操作数据库 ,以及类操作方法的更多相关文章

  1. php 通过mysqli 操作数据库mysql

    目录 php mysqli 操作数据库 连接数据库 通过mysqli 创建数据库 通过mysqi 创建数据表 通过mysqli向数据表中插入信息 通过mysqli 读取数据 where语句的应用 通过 ...

  2. MySQL的操作数据库SQL语法

    MySQL的操作数据库SQL语法 顺序:操作数据库 > 操作数据库中的表 > 操作数据库中的表的数据 MySQL不区分大小写字母 1. 操作数据库 1.创建数据库 2.删除数据库 3.使用 ...

  3. MySQL学习——操作数据库

    MySQL学习——操作数据库 摘要:本文主要学习了使用DDL语句操作数据库的方法. 创建数据库 语法 create database [if not exists] 数据库名 [default] ch ...

  4. 前端笔记之服务器&Ajax(中)MySQL基础操作&PHP操作数据库&Ajax

    一.数据库基础 1.1什么是数据库? 什么是数据库? 答:就是一个很大的一个文件,只不过这个文件可以通过一些‘命令’操作数据: 增.删.改.查数据: 数据库等于持久数据和数据操作的一个统称. 数据库是 ...

  5. Django框架中的model(操作数据库)

    什么是ORM ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去和复 ...

  6. c/c++连接mysql数据库设置及乱码问题(vs2013连接mysql数据库,使用Mysql API操作数据库)

    我的安装环境: (1)vs2013(32位版) (vs2013只有32位的 没有64位的,但是它可以编译出64位的程序)  : (2)mysql-5.7.15(64位) vs2013中的设置(按步骤来 ...

  7. JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)

    1.数据库配置类 package com.zdlt.auth.api.common.druid; import java.util.Properties; import static com.alib ...

  8. 在PHP中使用Mysqli操作数据库

    PHP的 mysqli 扩展提供了其先行版本的所有功能,此外,由于 MySQL 已经是一个 具有完整特性的数据库服务器 , 这为PHP 又添加了一些新特性 . 而 mysqli 恰恰也支持了 这些新特 ...

  9. thinkphp中的内置操作数据库与mysql中的函数汇总

    8.4.4 Model类getModelName() 获取当前Model的名称getTableName() 获取当前Model的数据表名称switchModel(type,vars=array()) ...

随机推荐

  1. LeetCode141:Linked List Cycle

    题目: Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without usin ...

  2. 使用ABP框架踩过的坑系列3

    从架构角度来讲,ApplicationService究竟应该如何定位,一种说法是直接对应用例UseCase, 也就是直接对应UI, 这个UI是广义的,不仅仅是浏览器的页面,也包括API调用.还是从我曾 ...

  3. dotNet core 应用部署centos

    ---恢复内容开始--- 阅读目录 需要安装的插件以及支撑架构 安装dotnetSDK 安装jexus 安装supervisord 遇到问题汇总 注意事项.扩展延伸 需要安装的插件以及支撑架构 1.d ...

  4. eclipse创建Maven工程没有Maven Dependencies

    记一次eclipse创建Maven工程没有Maven Dependencies的坑 Eclipse版本:luna版 maven用的3.5.0 配置本文不提. 这辆天用Eclipse创建maven工程 ...

  5. 对一致性hash原理的理解

    一致性hash算法解决的核心问题是,当solt数发生变化的时候能够尽量少的移动数据.该算法最早在<Consistent Hashing and Random Trees:Distributed ...

  6. Oracle性能问题sql调优脚本集

    ---------------------------------------------------------------------------------------------------- ...

  7. day 45 Django 的初识2 路由层,视图层,模板层

    前情提要: 今天继续学习Django 的内容, 今天主要和渲染相关 1>配置路由 >2:写函数 >3 指向url 一:路由层 1:配置静态支持文件 1:路由层的简单配置 >dj ...

  8. spring中的监视器,过滤器,拦截器

    1.监视器 (1)首先监视器是观察者模式的实现,在我之前的博客中有关于监视器模式的解释.监视器相当于观察者 (2)我们在springMvc中最常见的监视器 ContextLoaderlistener ...

  9. 实现可搜索仿select下拉选中

    由于在优化项目中,发现先前写的一个活化石级的的可搜索下拉功能在高速搜索中会出现卡顿现象 1.起初的解决方法是在搜索事件中加入防抖函数隔一段时间才去触发他,同时搜索的不再是html文档片段,而是直接对数 ...

  10. Redis数据类型之SDS简单动态字符串

    一,简单的动态字符串 1,Redis自己构建了一种名为简单动态字符串的抽象类型,并将SDS用作Redis的默认字符串表示, 2,在redis的数据库里面,包含字符串值的键值对在底层都是由SDS实现的 ...