#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()、、、、、