MYSQLI学习(面向过程)

2 篇文章 0 订阅

1. 连接数据库

/**
   * 连接数据库
   * mysqli_connect([host,username,password,dbname,port,socket])
   * params: 
   *  host: 规定主机名或 IP 地址
   *  username: 规定 MySQL 用户名
   *  password: 规定 MySQL 密码
   *  dbname: 规定默认使用的数据库
   *  port: 规定尝试连接到 MySQL 服务器的端口号
   *  socket: 规定 socket 或要使用的已命名 pipe
   */
  function connect() {
    global $con;
    $con = mysqli_connect("localhost", "root", "root", "my_db");
    // 检查连接是否成功
    if(!$con) {
      die("连接错误代码:".mysqli_connect_errno().";连接错误描述: ".mysqli_connect_error());
    }
  }

2. 设置字符集

/**
   * 规定当与数据库服务器进行数据传送时要使用的默认字符集
   * mysqli_set_charset(connection, charset);
   * params: 
   *  connection:规定要使用的MySQL连接
   *  charset: 规定默认字符集
   */
  function set_charset() {
    global $con;
    mysqli_set_charset($con, "utf-8");
  }

3. 关闭数据库

/**
   * 关闭先前打开的数据库连接
   * mysqli_close(connection)
   * params: 
   *  connection: 规定要关闭的MySQL连接
   */
  function close() {
    global $con;
    mysqli_close($con);
  }

4. 数据库查询

/**
   * 执行某个针对数据库的查询
   * mysqli_query(connection,query [,resultmode])
   * params: 
   *  connection: 规定要使用的 MySQL 连接
   *  query: 规定查询字符串
   *  resultmode: 一个常量;MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个);MYSQLI_STORE_RESULT(默认)
   * return: 针对成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,将返回一个 mysqli_result 对象。针对其他成功的查询,将返回 TRUE。如果失败,则返回 FALSE
   */
  function query() {
    global $con;
    $sql = "select * from persons";
    
    // 获取结果集
    $result = mysqli_query($con, $sql);

    // 从结果集取得所有行作为数组
    // fetch_all($result);

    // 返回结果集中的指针位置
    echo "<br>.结果集中的指针位置: ".mysqli_field_tell($result)."<br>";

    // 结果集指针设置
    mysqli_field_seek($result, 0);

    // 从结果集取得一行作为数组
    // fetch_array($result);

    // 从结果集取得一行作为关联数组
    // fetch_assoc($result);

    // 从结果集中取得某个单一字段(列)的meta-data,并作为对象返回
    // fetch_field_direct($result);

    // 从结果集中取得下一字段(列),并作为对象返回
    // fetch_field($result);

    // 返回结果集中代表字段(列)的对象的数组对象
    // fetch_fields($result);

    // 返回结果集中的字段长度
    // fetch_legnths($result);

    // 从结果集中取得当前行,并作为对象返回
    // fetch_object($result);

    // 从结果集中取得一行,并作为枚举数组返回
    fetch_row($result);


    // 返回最近查询的列数
    echo "<br>.最近查询的列数: ".mysqli_field_count($con)."<br>"; 

    // 返回字符集对象
    echo "<br>.字符集对象: ";
    print_r(mysqli_get_charset($con))."<br>";

    // 返回MySQL客户端库版本
    echo "<br>.MySQL客户端库版本: ";
    print_r(mysqli_get_client_info($con))."<br>";

    // 返回有关客户端每个进程的统计
    // echo "<br>.有关客户端每个进程的统计: ";
    // print_r(mysqli_get_client_stats())."<br>";

    // 将 MySQL 客户端库版本作为整数返回
    // echo "<br>.MySQL客户端库版本: ";
    // print_r(mysqli_get_client_version())."<br>";

    // 返回有关客户端连接的统计
    // echo "<br>.有关客户端连接的统计: ";
    // print_r(mysqli_get_connection_stats($con))."<br>";

    // 返回 MySQL 服务器主机名和连接类型
    echo "<br>.MySQL服务器主机名和连接类型: ";
    print_r(mysqli_get_host_info($con))."<br>";

    // 返回 MySQL 协议版本
    echo "<br>.MySQL协议版本: ";
    print_r(mysqli_get_proto_info($con))."<br>";

    // 返回 MySQL 服务器版本
    echo "<br>.MySQL服务器版本: ";
    print_r(mysqli_get_server_info($con))."<br>";
    
    // 返回有关最近执行查询的信息?(无任何输出)
    echo "<br>.返回有关最近执行查询的信息: ";
    print_r(mysqli_info($con))."<br>";

    // 返回最后一个查询中自动生成的 ID
    echo "<br>.返回最后一个查询中自动生成的ID: ";
    print_r(mysqli_insert_id($con))."<br>";

    // 释放结果集
    mysqli_free_result($result);
  }

  /**
   * 从结果集中取得所有行作为关联数组,或数字数组,或二者兼有
   * mysqli_fetch_all(result,resulttype)
   * params:
   *  result: 规定由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符
   *  resulttype: 关联 - MYSQLI_ASSOC,索引 - MYSQLI_NUM,二者兼有 - MYSQLI_BOTH
   */
  function fetch_all($result) {
    $arr = mysqli_fetch_all($result, MYSQLI_ASSOC);
    echo "获取所有行:<br>";
    print_r($arr);
  }

  /**
   * 从结果集中取得一行作为关联数组,或数字数组,或二者兼有
   * mysqli_fetch_array(result,resulttype)
   * params: 
   *  参数与mysqli_fetch_all相同
   */
  function fetch_array($result) {
    echo "获取一行:<br>";
    while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
      print_r($row);
    }
  }

  /**
   * 从结果集中取得一行作为关联数组
   * mysqli_fetch_assoc(result)
   */
  function fetch_assoc($result) {
    echo "获取一行assoc:<br>";
    while($row = mysqli_fetch_assoc($result)) {
      print_r($row);
    }
  }

  /**
   * 从结果集中取得某个单一字段(列)的 meta-data,并作为对象返回,比如字段名,数据表,最大长度
   * fetch_field_direct(result,fieldnr)
   * params: 
   *  fieldnr: 规定字段号。必须介于 0 和 字段数-1 之间
   */
  function fetch_field_direct($result) {
    echo "返回表对象:<br>";
    $fieldinfo = mysqli_fetch_field_direct($result, 1);
    print_r($fieldinfo);
    /*
      返回的对象成员:
      name - 列名
      orgname - 原始的列名(如果指定了别名)
      table - 表名
      orgtable - 原始的表名(如果指定了别名)
      def - 保留作为默认值,当前总是为 ""
      db - 数据库(在 PHP 5.3.6 中新增的)
      catalog - 目录名称,总是为 "def"(自 PHP 5.3.6 起)
      max_length - 字段的最大宽度
      length - 在表定义中规定的字段宽度
      charsetnr - 字段的字符集号
      flags - 字段的位标志
      type - 用于字段的数据类型
      decimals - 整数字段,小数点后的位数
    */
  }

  /**
   * 从结果集中取得下一字段(列),并作为对象返回,比如字段名,数据表,最大长度
   * mysqli_fetch_field(result)
   */
  function fetch_field($result) {
    $fieldinfo = mysqli_fetch_field($result);
    print_r($fieldinfo);
  }

  /**
   * 返回结果集中代表字段(列)的对象的数组对象,比如字段名,数据表,最大长度
   * mysqli_fetch_fields(result)
   */
  function fetch_fields($result) {
    $fieldinfos = mysqli_fetch_fields($result);
    print_r($fieldinfos);
  }

  /**
   * 返回结果集中的字段长度
   * mysqli_fetch_lengths(result)
   */
  function fetch_legnths($result) {
    // $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    $row = mysqli_fetch_row($result);
    $lengths = mysqli_fetch_lengths($result);
    print_r($lengths);
  }

  /**
   * 从结果集中取得当前行,并作为对象返回
   * mysqli_fetch_object(result [,classname][,params])
   * params: 
   *  classname: 规定要实例化的类名称
   *  params: 规定一个传给 classname 对象构造器的参数数组
   * return: 返回带有所取得行的字符串属性的对象。如果在结果集中没有更多的行则返回 NULL
   */
  function fetch_object($result) {
    while($row_obj = mysqli_fetch_object($result)) {
      print_r($row_obj);
    }
  }
  
  /**
   * 从结果集中取得一行,并作为枚举数组返回
   * mysqli_fetch_row(result)
   * return: 返回一个与所取得行相对应的字符串数组。如果在结果集中没有更多的行则返回 NULL
   */
  function fetch_row($result) {
    while($row = mysqli_fetch_row($result)) {
      print_r($row);
    }
  }

  // 执行数据库操作
  function demo() {
    connect();
    set_charset();
    // stats();
    // thread_id();
    query();

    close();
  }

  // demo();

5. 事务(数据表引擎必须要支持事务,比如InnoDB)

// 事务
  function demo2() {
    connect();
    set_charset();

    global $con;
    // 关闭自动提交
    mysqli_autocommit($con, FALSE);
    // 插入测试值
    $res1 = mysqli_query($con, "insert into persons (name, age) values ('xxl6', '31')");
    $res2 = mysqli_query($con, "insert into persons (name, age) values ('xxl7', '32')");
    // 有一条失败则回滚,全部成功则提交
    if (!$res1 || !$res2) {
      echo "回滚!";
      mysqli_rollback($con);
    } else {
      echo "提交!";
      mysqli_commit($con);
    }

    // 关闭自动提交
    mysqli_autocommit($con, TRUE);

    close();
  }
  demo2();

6. 其他

/**
   * 其他API
   * mysqli_thread_safe(): 返回是否将客户端库编译成 thread-safe
   * mysqli_more_results(): 检查一个多查询是否有更多的结果
   * mysqli_multi_query(): 执行一个或多个针对数据库的查询
   * mysqli_next_result(): 为 mysqli_multi_query() 准备下一个结果集
   * mysqli_num_fields(): 返回结果集中字段的数量
   * mysqli_num_rows(): 返回结果集中行的数量
   * mysqli_options(): 设置额外的连接选项,用于影响连接行为
   * mysqli_ping(): 进行一个服务器连接,如果连接已断开则尝试重新连接
   * mysqli_prepare(): 准备执行一个 SQL 语句
   * mysqli_real_connect(): 打开一个到 MySQL 服务器的新的链接
   * mysqli_real_escape_string(): 转义在 SQL 语句中使用的字符串中的特殊字符
   * mysqli_real_query(): 执行 SQL 查询
   * mysqli_reap_async_query(): 返回异步查询的结果
   * mysqli_refresh(): 刷新表或缓存,或者重置复制服务器信息
   * mysqli_select_db(): 更改连接的默认数据库
   * mysqli_ssl_set(): 用于创建 SSL 安全连接
   * mysqli_store_result(): 传输最后一个查询的结果集
   * mysqli_use_result(): 从上次使用 mysqli_real_query() 执行的查询中初始化结果集的检索
   * mysqli_data_seek(): 调整结果指针到结果集中的一个任意行
   */

  /**
   * 事务相关
   * mysqli_rollback(): 回滚数据库中的当前事务
   * mysqli_commit(): 提交当前事务
   * mysqli_autocommit(): 自动提交的关闭或开启
   */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值