mysqli扩展函数的应用

来源:互联网 发布:mac 终端 ssh 端口 编辑:程序博客网 时间:2024/05/16 04:04

                                                                                                     mysqli扩展函数的应用

 

 

一. 建立连接

     与 MySQL数据库交互时,首先要建立连接,最后要断开连接,这包括与服务器连接并选择一个数据库,以及最后关闭连接。与 mysqli 几乎所有的特性一样 ,这一点可以使用两种方法来完成。

1.使用mysqli_connect()函数

  mysqli_connect()函数用来连接MySQL数据库,语法如下:

  mysqli 对象名=mysqli_connect(数据库服务器,用户名,密码,数据库名)

例如,要访问本机上的MySQL数据库guest,用户名为root,密码为111,代码如下:

   $conn=mysqli_connect('localhost','root','111','guest');

2.申明mysqli对象

可以使用申明mysqli对象的方法来创建连接对象,方法如下:

   $conn=new  mysqli('localhost','root','111','guest');

如果在创建mysqli对象时没有向构造方法传入参数,则需要多写几行代码,包括调用connect函数连接数据库服务器,使用select_db

方法选择数据库,代码如下:

$conn = new  mysqli();

$conn->connect( 'localhost' , 'root' , '111' , 'guest' );

$conn->select_db( 'guest' );

说明:new mysqli()表示新建一个myqsli类的实例,类的实例即对象,赋給变量$conn,由于$conn是个对象,调用对象的方法可以使用“对象名->方法名”的形式。

  mysqli类常见的成员方法如下:

方法名

功能

connect()

连接数据库服务器

select_db()

选择当前数据库

set_charset()

设置字符集

close()

关闭连接

query()

执行sql语句,并返回结果集(对于select语句)或不返回(非查询语句)

multi_query()

同时执行多条查询语句

store_result()

在执行多条查询语句时,获取当前结果集

next_result()

在执行多条查询语句时,获取当前结果集的下一个结果集

more_result()

从多查询语句中检查是否有任何更多的查询结果集

 

二. 处理连接错误

    如果无法连接 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( $conn ->errno) {

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

    }

三. 与数据库进行交互

绝大多数查询都与创建(Creation) 、获取 (Retrieval) 、更新 (Update) 和删除 (Deletion) 任务有关,这些任务统称为 CRUD 。

1. 获取数据

网页程序大多数工作都是在获取和格式化所请求的数据。为此,要向数据库发送SELECT查询,再对结果进行迭代处理,将各行输出给浏览器,并按照自己的要求输出。

// 设置一下编码 utf8

   $conn->set_charset( "utf8" );

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

   $result = $conn->query(“SELECT * FROM  tg_user”);

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

    print_r( $result->fetch_row());

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

   $result->free();

2. 解析查询结果

     一旦执行了查询并准备好结果集 ,下面就可以解析获取到的结果行了 。你可以使用多个方法来获取各行中的字段 ,具体选择哪一个方法主要取决于个人喜好 , 因为只是引用字段的方法有所不同。将结果集放到对象中由于你可能会使用 mysqli的面向对象的语法 , 所以完全可以采用面向对象的方式管理结果集。可以fetch_object() 方法来完成。

// 将结果集包装成对象

   $row = $result->fetch_object();

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

echo $row->tg_username;

// 遍历所有的用户名称

while ($row =$result->fetch_object()) {

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

}

当然也使用索引数组和关联数组.

(1)结果集包装成索引数组(fetch_row()方法)

   $row = $result-->fetch_row();

   echo $row [ 3 ];

   遍历所有的用户名称

while ($row =$result- ->fetch_row()) {

echo $row [3]. ' <br /> ' ;

}

(2)将结果集包装成关联数组(fetch_assoc()方法)

$row = $result-->fetch_assoc();

echo $row ['tg_username' ];

    遍历所有的用户名称

 while ($row =$result-->fetch_assoc()) {

echo $row ['tg_username' ]. ' <br /> ' ;

}

(3)将结果集包装成数组 ( 索引 +关联 )(fetch_array()方法)

   $row = $result-->fetch_array();

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

   echo $row [ 3 ];

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

echo $row ['tg_username' ];

  遍历所有的用户名称

while ($row =$result- ->fetch_array()) {

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

//echo  $row[3]. ' <br /> ' ;  //这样也行

}

 

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

   通常希望能够确定 SELECT查询返回的行数 , 或者受 INSERT 、 UPDATE 或 DELET 查询影响的行数。我们可以使用num_rows 和 affected_rows 两个属性.

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

   echo $result-->num_rows;

// 当不使用查询时 , 想了解INSERT 、 UPDATE 、 DELETE 查询时影响的行数,可以使用affected_rows; 注意,它是 $conn 下的属性。

   echo $conn->affected_rows;

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

当你并不想从第一条数据开始获取 ,或者并不想从第一个字段获取 , 你可以使用数据指针移动或者字段指针移动的方式调整到恰当的位置。当然,你还可以获取字段的名称及其相关的属性。

// 计算有多少条字段

   echo $result-->field_count;

// 获取字段的名称

   $_field = $result-->fetch_field();

   echo $_field->name;

// 遍历字段

   while ($_field =$result- ->fetch_field()) {

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

   }

// 一次性取得字段数组

   print_r( $result-->fetch_fields());

// 移动数据指针

$result-->data_seek( 5 );

// 移动字段指针

$result-->field_seek( 2 );

5. 执行多条 SQL 语句

有的时候 ,我们需要在一张页面上同时执行多条 SQL 语句 , 之前的方法就是分别创建多个结果集然后使用。但这样资源消耗很大,也不利于管理。PHP 提供了执行多条 SQL 语句的方法 $conn->multi_query() ;

// 创建多条 SQL 语句

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

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

$_sql .="SELECT * FROM tg_article" ;

// 开始执行多条 SQL 语句

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

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

$result-= $conn ->store_result();

print_r($result- ->fetch_array());

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

$conn->next_result();

$result= $conn ->store_result();

print_r($result ->fetch_array());

$conn->next_result();

$result= $conn ->store_result();

print_r($result ->fetch_array());

} else {

echo 'sql 语句有误! ' ;

}

6. 执行数据库事务

事务 (transaction)是作为整个一个单元的一组有序的数据库操作 。 如果一组中的所有操作都成功 , 则认为事务成功 ,即使只有一个失败操作 , 事务也不成功 。 如果所有操作成功完成 , 事务则提交 (commit) ,其修改将作用于所有其他数据库进程 。 如果一个操作失败 , 则事务将回滚 (roll back),该事务所有操作的影响都将取消。首先 , 您的 MySQL 是InnoDB 或 BDB 引擎的一种 , 一般来说 , 你安装了 AppServ 的集成包 , 你选择 InnoDB的引擎的数据库即可 。 如果你建立的表不是 InnoDB , 可以在 phpmyadmin里修改。

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

   $conn->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 ( $conn->multi_query( $_sql )) {

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

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

//下移,第二条 SQL

$conn->next_result();

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

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

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

if( $_success && $_success2 ) {

$conn->commit();

echo' 完美提交! ' ;

}else {

$conn->rollback();

echo' 程序出现异常! ' ;

}

}

} else {

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

}

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

 $conn->autocommit( true );

 

 

0 0