PHP:mysqli扩展常用API

#Base.php
<?php

class Base
{
  private $host = 'localhost';
  private $user = 'root';
  private $password = 'root';
  private $db_name;
  protected $mysqli;

  public function __construct($db_name)
  {
    $this->db_name = $db_name;
    self::connect();
    self::selectDb();
  }

  public function __get($name)
  {
    return $this->$name;
  }

  public function __set($name, $value)
  {
    if ($name == 'db_name') {
      $this->$name = $value;
    } else {
      throw Error('无法修改属性'.$name);
    }
  }

  /**
   * 连接数据库
   * new mysqli()实例化mysql对象
   * mysqli->connect_errno属性:返回最后一次连接调用的错误代码
   * mysqli->connect_error属性:返回一个字符串描述的最后一次连接调用的错误代码
   */
  public function connect()
  {
    // $mysqli = $this->mysqli = @new mysqli($this->host, $this->user, $this->password, $this->db_name);
    $mysqli = $this->mysqli = @new mysqli($this->host, $this->user, $this->password);
    if ($mysqli->connect_error) {
      die('连接错误代码:'.$mysqli->connect_errno.'连接错误描述: '.$mysqli->connect_error);
    }
  }

  /**
   * 选择用于数据库查询的默认数据库 
   * select_db()选择默认数据库
   */
  public function selectDb()
  {
    $db_name = $this->db_name;
    $mysqli = $this->mysqli;
    $bool = $mysqli->select_db($db_name);
    if (!$bool) {
      die('数据库: '.$db_name.'不存在');
    }
  }

}
index.php
<?php

include 'Base.php';

# mysqli面向对象方法总结
# 使用本地数据库message下的message表

class Message extends Base
{
  
  public function __construct($db_name)
  {
    parent::__construct($db_name);
  }

  /**
   * 关闭先前打开的数据库连接
   */
  public function __destruct()
  {
    $this->mysqli->close();
  }

  /**
   * 返回字符串类型的Mysql客户端版本信息
   * client_info
   */
  public function clientInfo()
  {
    $mysqli = $this->mysqli;
    $client_info = $mysqli->client_info;
    echo 'mysql客户端信息:';
    dprint( $client_info );
  }

  /**
   * 返回整型的Mysql客户端版本信息
   * 属性:client_version
   */
  public function clientVersion()
  {
    $mysqli = $this->mysqli;
    $client_version = $mysqli->client_version;
    echo 'mysql版本号:';
    dprint( $client_version );
  }

  /**
   * 返回最近函数调用的错误代码,返回0代表没有错误发生
   * 属性:errno
   * 返回字符串描述的最近一次函数调用产生的错误代码
   * 属性:error
   */
  public function errno()
  {
    $mysqli = $this->mysqli;
    $results = $mysqli->query('select * from messages');
    if (!$results) {
      dprint( '查询数据失败,函数调用失败代码:'. $mysqli->errno. ',错误描述: '.$mysqli->error );
    }
  }

  /**
   * 返回最近一次查询获取到的列的数目
   * 属性:field_count
   */
  public function fieldCount()
  {
    $mysqli = $this->mysqli;
    $results = $mysqli->query('select * from message');
    if ($results) {
      dprint( '查询数据成功,获取到的列的数目:'. $mysqli->field_count );
      dprint($results);
    }
  }

  /**
   * 返回一个表述使用的连接类型的字符串 
   * 属性:host_info
   */
  public function hostInfo()
  {
    $mysqli = $this->mysqli;
    $host_info = $mysqli->host_info;
    echo 'mysql连接类型:';
    dprint( $host_info );
  }

  /**
   * 返回MySQL使用的协议版本号 
   * 属性:protocol_version
   */
  public function protocolVersion()
  {
    $mysqli = $this->mysqli;
    $protocol_version = $mysqli->protocol_version;
    echo 'mysql协议版本号 :';
    dprint( $protocol_version );
  }

  /**
   * 返回MySQL服务器的版本号  
   * 属性:server_info
   */
  public function serverInfo()
  {
    $mysqli = $this->mysqli;
    $server_info = $mysqli->server_info;
    echo 'MySQL服务器的版本号:';
    dprint( $server_info );
    echo 'MySQL服务器的版本号:';
    dprint( $server_info );
  }

  /**
   * 最近一次执行的查询的检索信息
   * 属性:info
   * 问题:未返回sql查询语句
   */
  public function info()
  {
    $mysqli = $this->mysqli;
    $mysqli->query('select * from message');
    dprint( $mysqli->info );
  }

  /**
   * 返回前一个Mysql操作的SQLSTATE错误
   * 属性:sqlstate
   * 问题:未返回sql查询语句
   */
  public function sqlstate()
  {
    $mysqli = $this->mysqli;
    $results = $mysqli->query('select * from messages');
    if (!$results) {
      dprint( 'Mysql操作的SQLSTATE错误: '.$mysqli->sqlstate );
    }
  }

  /**
   * 返回给定链接最后一次查询的警告数量
   * 属性:warning_count
   * 问题:未返回sql查询语句
   */
  public function warningCount()
  {
    $mysqli = $this->mysqli;
    $results = $mysqli->query('select * from message');
    if ($mysqli->warning_count) {
      dprint( 'Mysql有警告,函数调用错误: '. $mysqli->warning_count);
    } else {
      dprint( $results );
    }
  }

  /**
   * 打开或关闭本次数据库连接的自动命令提交事务模式
   * autocommit()
   */
  public function autocommit()
  {
    $mysqli = $this->mysqli;
    $mysqli->autocommit(true);
    $results = $mysqli->query('select * from message');
    if ($results) {
      $row = $results->fetch_row();
      dprint( '自动提交是打开的');
      dprint($row);
      $results->free();
    }
  }

  /**
   * 更改指定数据库连接的用户
   * change_user()
   */
  public function changeUser(){}

  /**
   * 返回数据库连接的默认字符集
   * character_set_name()
   */
  public function characterSetName()
  {
    $mysqli = $this->mysqli;
    dprint('返回数据库连接的默认字符集: '. $mysqli->character_set_name());    //utf8
  }

  /**
   * 返回对象的字符集
   * get_charset()
   */
  public function getCharset()
  {
    $mysqli = $this->mysqli;
    echo '返回数据库连接的默认字符集: ';
    dprint( $mysqli->get_charset() );
    dprint( $mysqli->get_charset()->charset );
  }

  /**
   * 返回客户端连接的统计信息。 仅可用于 mysqlnd
   * get_connectioon_stats()
   */
  public function getConnectionStats()
  {
    $mysqli = $this->mysqli;
    echo '返回客户端连接的统计信息: ';
    dprint( $mysqli->get_connection_stats() );
  }

  /**
   * 返回字符串描述的Mysql客户端版本
   * get_connectioon_stats()
   */
  public function getClientInfo()
  {
    $mysqli = $this->mysqli;
    echo '返回字符串描述的Mysql客户端版本: ';
    dprint( $mysqli->get_client_info() );
  }

  /**
   * 请求服务器杀死一个Mysql线程
   * kill()
   * 返回当前连接的线程ID
   * mysqli->thread_id() 
   */
  public function kill()
  {
    $mysqli = $this->mysqli;
    $thread_id = $mysqli->thread_id;
    $mysqli->kill($thread_id);
    if (!$mysqli->query('select * from message')) {
      echo '已结束mysql线程';
    }
  }

  /**
   * 检查一个多语句查询是否还有其他查询结果集
   * mysqli->more_results() 
   * 在数据库上执行一个多语句查询
   * mysqli->multi_query() 
   *  从multi_query中准备下一个结果集 
   * mysqli->next_result() 
   */
  public function multi()
  {
    echo '多语句查询';
  }

  /**
   * 创建一个预查询语句
   * $stmt  =  $mysqli -> prepare ( "select * from message" )
   */
  public function prepare()
  {
    echo '创建一个预查询语句';
  }

  

  ##########
  # 以下为常用API
  ##########
  /**
   * 获取前一个Mysql操作的受影响行数
   * 属性: affected_rows
   */
  public function affectedRows()
  {
    $mysqli = $this->mysqli;
    $results = $mysqli->query('select * from message');
    if ($results) {
      dprint( '查询数据成功,影响记录行数:'. $mysqli->affected_rows );
      dprint($results);
    }
  }
  /**
   * 设置默认的客户端字符集
   * mysqli->set_charset() 
   */
  public function setCharset()
  {
    echo '设置默认的客户端字符集';
  }
  /**
   * 返回最后一次查询自动生成并使用的id
   * 属性:insert_id
   */
  public function insertId()
  {
    $mysqli = $this->mysqli;
    $mysqli->query('insert into message (user, title) values("xxl2", "js")');
    dprint( '最后一次查询自动生成并使用的id: '.$mysqli -> insert_id );
  }

  /**
   * 提交一个事务(需要支持事务的引擎,比如InnoDB)
   */
  public function commit()
  {
    $mysqli = $this->mysqli;
    // 关闭自动提交
    $mysqli->autocommit(FALSE);
    $results = $mysqli->query('select * from message');
    // $mysqli->commit();
    if ($results) {
      $row = $results->fetch_row();
      dprint($row);
      $results->free();
    } else {
      dprint('查询失败');
      $mysqli->rollback ();
    }
  }

  #--- Result API ---#
  /**
   * 获取当前字段在结果集指针中的开始位置
   * $mysqli_result->current_field 
   * 获取结果中字段数量
   * $mysqli_result->field_count 
   * 返回结果集中的下一个字段
   * mysqli_result->fetch_field() 
   * 释放与一个结果集相关的内存
   * mysqli_result->free_result 
   * 返回一个代表结果集字段的对象数组
   * mysqli_result->fetch_fields() 
   * 设置结果指针到特定的字段开始位置
   * mysqli_result->field_seek() 
   * 抓取一个单字段的元数据
   * mysqli_result->fetch_field_direct() 
   */
  public function currentField()
  {
    $mysqli = $this->mysqli;
    $results = $mysqli->query('select * from message');
    if ($results) {
      while ($finfo = $results->fetch_field()) {
        $current_field = $results->current_field;
        dprint( '字段索引位置:'. $current_field );
        dprint('------'.$finfo->name);
      }
    }
    $results->field_seek(1);
    dprint('------使用fetch_fields()方法获取所有字段');
    if ($results) {
      $finfos = $results->fetch_fields();
      dprint( '结果中字段数量'.$results->field_count );
      foreach ($finfos as $val) {
        dprint($val->name);
      }
    }
    $results->field_seek(1);
    dprint('-----使用fetch_field_direct()方法抓取一个单字段的元数据');
    if ($results) {
      $finfo = $results->fetch_field_direct(1);
      printf ( "Name:     %s<br>" ,  $finfo -> name );
      printf ( "Table:    %s<br>" ,  $finfo -> table );
      printf ( "max. Len: %d<br>" ,  $finfo -> max_length );
      printf ( "Flags:    %d<br>" ,  $finfo -> flags );
      printf ( "Type:     %d<br>" ,  $finfo -> type );
    }

    $results->free_result();
  }

  /**
   * 获取结果中行的数量
   * $results->num_rows
   * 以一个枚举数组方式返回一行结果
   * $results->fetch_row()
   * 以一个对象的方式返回一个结果集中的当前行
   * $results->fetch_object()
   * 以一个关联数组方式抓取一行结果
   * $results->fetch_assoc()
   * 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果
   * $results->fetch_array()
   * 将结果中的结果指针调整到任意行
   * $results->data_seek(0)
   * 获取所有结果集
   * $results->fetch_all()
   */
  public function fetchArray()
  {
    $mysqli = $this->mysqli;
    $results = $mysqli->query('select * from message');
    if ($results) {
      dprint( '获取结果中行的数量: '.$results->num_rows );

      // 以一个枚举数组方式返回一行结果
      // while ($row = $results->fetch_row()) {
      //   echo '枚举返回结果: ';
      //   dprint( $row );
      // }

      // 以一个对象的方式返回一个结果集中的当前行
      // while ($row = $results->fetch_object()) {
      //   echo '以一个对象的方式返回一个结果集中的当前行: ';
      //   dprint( $row );
      // }

      // 以一个关联数组方式抓取一行结果
      // while ($row = $results->fetch_assoc()) {
      //   echo '以一个关联数组方式抓取一行结果: ';
      //   dprint( $row );
      // }

      // 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果
      while ($row = $results->fetch_array()) {
        echo '以一个关联数组+索引数组方式抓取一行结果: ';
        dprint( $row );
      }

      // 将结果中的结果指针调整到任意行
      $results->data_seek(0);

      // 获取所有结果集fetch_all()
      $rows = $results->fetch_all();
      foreach ($rows as $val) {
        dprint($val);
      }

      

    }
    $results->free_result();
  }
  
}

$mes = new Message('message');

# 常用-属性
// $mes->affectedRows();
// $mes->errno();
// $mes->insertId();

##常用-方法
// $mes->autocommit();
// $mes->commit();

# result属性和方法
// $mes->currentField();
// $mes->fetchArray();

# 其他
// $mes->info();
// $mes->clientInfo();
// $mes->clientVersion();
// $mes->hostInfo();
// $mes->protocolVersion();
// $mes->serverInfo();
// $mes->sqlstate();
// $mes->warningCount();
// $mes->getConnectionStats();
// $mes->getClientInfo();
// $mes->kill();
// $mes->characterSetName();
// $mes->getCharset();
// $mes->fieldCount();


###需要认识的操作
// debug()、dump_debug_info()、、、、、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值