Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11354
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 22:42
个人简介

好好学习,天天向上!

文章分类

全部博文(4)

文章存档

2013年(4)

我的朋友

分类: PHP

2013-10-17 22:43:58

第 23 章 使用 Mysqli操作数据库

学习要点:

  1. 建立和断开连接

  2. 处理连接错误

  3. 与数据库进行交互

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

一. 建立和断开连接


点击(此处)折叠或打开

  1. 1.创建一个数据库连接对象,句柄
  2. $_mysqli = new mysqli();
  3. 2.链接数据库
  4. $_mysqli->connect(‘主机地址’,’用户名’,’密码’,’数据库名称’);
  5. 3.创建Mysql 主机,用户名,密码,数据的链接对象
  6. $_mysqli = new mysqli(‘主机地址’,’用户名’,’密码’,’数据库名称’);
  7. 4.重新自由选择数据库
  8. $_mysqli->select_db(‘数据库名称’);
  9. 5.关闭数据库
  10. $_mysqli->close( ) ;



二. 处理连接错误

如果无法连接 MySQL 数据库,那么这个页面不太可能继续完成预期的工作。因此,一定要注意监视连接错误并相应地做出反应 。 Mysqli 扩展包含有很多特性可以用来捕获错误信息,例如: mysqli_connect_errno() 和 mysqli_connect_error() 方法。 mysqli_connect_errno() 函数返回连接数据库返回的错误号。

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


点击(此处)折叠或打开

  1. if (mysqli_connect_errno()) {
  2. echo ' 数据库连接错误,错误信息: ' .mysqli_connect_error();
  3. exit ();
  4. }
  5. errno 属性返回数据库操作时的错误号。
  6. error 属性返回数据库操作时的错误代码。
  7. if ( $_mysqli ->errno) {
  8. echo ' 数据库操作时发生错误,错误代码是: ' . $_mysqli ->error;
  9. }





三. 与数据库进行交互

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


1. 
获取数据

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

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


点击(此处)折叠或打开

  1. $_mysqli->set_charset(‘utf8’); // 设置字符编码格式
  2. $_sql=’select * from tb_user ’;     // 创建查询语句
  3. $_result = $_mysqli-query($_sql); // 执行语句并将结果集给result
  4. Print_r( $_result->fetch_row( ) ); // 输出结果集的第一行
  5. $_result->free( ); // 释放结果集



2. 
解析查询结果

一旦执行了查询并准备好结果集 , 下面就可以解析获取到的结果行了 。 你可以使用多个方法来获取各行中的字段 , 具体选择哪一个方法主要取决于个人喜好 , 因为只是引用字段的方法有所不同。


点击(此处)折叠或打开

  1. // 1》》将结果集释放到对象当中去,包装成对象
  2. $_object = $_result->fetch_object( ) ;
  3. echo $_object->tg_username; // 输出对象中的一个属性
  4. //遍历对象结果集
  5. While( !! $_object=$_result->fetch_object( ) ){
  6. echo $_object->tg_username;
  7. }
  8. // 2>>使用索引数组和关联数组
  9. // 使用 [索引+关联]数组
  10. $_row = $_result->fetch_array( );
  11. echo $_row[1];     // 输出 用户名
  12. echo $_row[‘tg_username’]; // 输出用户名
  13. // 使用索引数组
  14. $_row = $_result->fetch_row();
  15. echo $_row[3];
  16. // 使用关联数组
  17. $_row = $_result->fetch_assoc( );
  18. 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. 
移动指针的操作和获取字段

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

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

 


点击(此处)折叠或打开

  1. // 计算有多少条字段
  2.     echo $_reslut ->field_count;
  3.     // 获取字段的名称
  4.     $_field = $_reslut ->fetch_field();
  5.     echo $_field ->name;
  6.     // 遍历字段
  7.     while (!! $_field = $_reslut ->fetch_field()) {
  8.         echo $_field ->name. '
    '
    ;
  9.     }
  10.     // 一次性取得字段数组
  11.     print_r( $_reslut ->fetch_fields());
  12.     // 移动数据指针
  13.     $_reslut ->data_seek( 5 );
  14.     // 移动字段指针
  15.     $_reslut ->field_seek( 2 );


5. 执行多条 SQL 语句


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


点击(此处)折叠或打开

  1. // 创建多条 SQL 语句
  2. $_sql .= "SELECT * FROM tg_user;" ;
  3. $_sql .= "SELECT * FROM tg_photo;" ;
  4. $_sql .= "SELECT * FROM tg_article" ;
  5. // 开始执行多条 SQL 语句
  6. if ( $_mysqli ->multi_query( $_sql )) {
  7. // 开始获取第一条 SQL 语句的结果集
  8. $_result = $_mysqli ->store_result();
  9. print_r( $_result ->fetch_array());
  10. // 将结果集指针移到下一个
  11. $_mysqli ->next_result();
  12. $_result = $_mysqli ->store_result();
  13. print_r( $_result ->fetch_array());
  14. $_mysqli ->next_result();
  15. $_result = $_mysqli ->store_result();
  16. print_r( $_result ->fetch_array());
  17. } else {
  18. echo 'sql 语句有误! ' ;
  19. }




6. 执行数据库事务


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


点击(此处)折叠或打开

  1. // 首先你必须关闭自动提交数据
  2. $_mysqli ->autocommit( false );
  3. // 创建一个 SQL 语句 ,必须同时运行成功,不能出现一个成功,一个失败
  4. $_sql .= "UPDATE tg_friend SET tg_state=tg_state+5 WHERE tg_id=1;" ;
  5. $_sql .= "UPDATE tg_flower SET tg_flower=tg_flower-5 WHERE tg_id=1;" ;
  6. // 执行两条 SQL 语句
  7. if ( $_mysqli ->multi_query( $_sql )) {
  8.     // 获取第一条 SQL 一影响的行数
  9.     $_success = $_mysqli ->affected_rows == 1 ? true : false ;
  10.     // 下移,第二条 SQL
  11.     $_mysqli ->next_result();
  12.     // 获取第二条 SQL 影响的行数
  13.     $_success 2 = $_mysqli ->affected_rows == 1 ? true : false ;
  14.     // 判断是否都正常通过了,两个 SQL
  15.     if ( $_success && $_success2 ) {
  16.         $_mysqli ->commit();
  17.         echo ' 完美提交! ' ;
  18.     } else {
  19.       $_mysqli ->rollback();
  20.       echo ' 程序出现异常! ' ;
  21.     }
  22. } else {
  23.     echo "SQL 语句有误: " . $_mysqli ->errno. $_mysqli ->error;
  24. }
  25. // 最后还必须开启自动提交
  26. $_mysqli ->autocommit( true );






阅读(534) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~