zoukankan      html  css  js  c++  java
  • 在PHP中使用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 );

  • 相关阅读:
    [bzoj4721][noip2016]蚯蚓
    [bzoj1112][POI2008]砖块KLO
    [bzoj3196][tyvj1728]普通平衡树
    [bzoj1596][Usaco2008 Jan]电话网络
    [bzoj3371][poj2009][Usaco2004 Mar]Moo University
    [bzoj2208][Jsoi2010]连通数
    郑捷《机器学习算法原理与编程实践》学习笔记(第四章 推荐系统原理)(二)kmeans
    郑捷《机器学习算法原理与编程实践》学习笔记(第四章 推荐系统原理)(一)推荐系统概述
    Python_sklearn机器学习库学习笔记(四)decision_tree(决策树)
    C++STL学习笔记_(1)vector知识
  • 原文地址:https://www.cnblogs.com/huangzelin/p/4619265.html
Copyright © 2011-2022 走看看