MySQLi扩展
简介
MySQL增强扩展 PHP>=5
面向过程 + 面向对象
支持预处理语句
支持事务
安装配置
1、php配置文件 开启php_mysqli.dll
2、配置extension_dir= ext目录所在位置
3、重启服务器
4、检测扩展开启四种方式
<?php // 1、查看环境信息 phpinfo(); // 2、检测扩展是否加载 true/false var_dump(extension_loaded('mysqli')); // 3、检测函数是否存在 var_dump(function_exists('mysqli_connect')); // 4、得到当前已经开启的扩展 print_r(get_loaded_extensions());
MySQLi扩展面向对象的使用
- 建立MySQL连接
- 打开指定数据库
- 设置默认客户端字符集 utf-8
- 执行SQL查询
- 释放结果集
- 关闭数据库
MySQLi常用方法
方法 | 说明
-|-
new mysqli() | 实例化
connect() | 连接
close() | 关闭
select_db() | 选择数据库
connect_errno | 连接错误号
connect_error | 连接错误
client_info | 客户端信息
get_client_info() | 客户端信息
client_version | 客户端版本
server_info | 服务器信息
get_server_info() | 服务器信息
server_version | 服务器版本
set_charset() | 设置字符编码
query() | 执行查询(bool, 获取result_set)
insert_id | 获取自增id
affected_rows | 影响行数(受影响条数>0, 没有影响条数=0, sql有问题=-1)
errorno | 执行错误号
error | 执行错误编码
multi_query() | 执行多条sql,分号分隔
use_result()/store_result() | 获取结果集
more_results() | 检测是否还有更多结果集
next_result() | 结果集指针向下移动一位
prepare() | 预处理语句 占位符:?
$stmt->bind_param() | 绑定参数
$stmt->execute() | 执行sql
结果集方法
方法 | 说明
-|-
$result->num_rows | 结果集数量
$result->fetch_all() | 获取结果集所有数据,
$result->fetch_row() | 获取结果集一条数据
$result->fetch_assoc() | 获取结果集一条关联数据
$result->fetch_array() | 获取结果集索引+关联数据
$result->fetch_object() | 获取结果集对象
$result->data_seek(0) | 移动结果集内部指针
$result->close() | 释放结果集
fetch_all可选常量参数可省略
索引 MYSQLI_NUM
关联 MYSQLI_ASSOC
索引+关联 MYSQLI_BOTH
使用示例
1、配置信息
$host = 'localhost'; $user = 'root'; $password = '123456'; $database = 'data';
2、连接数据库
// 方式一 $mysqli = new mysqli(); $mysqli->connect($host, $username, $password); $mysqli->select_db($database); // 方式二 $mysqli = new mysqli($host, $username, $password); $mysqli->select_db($database); // 方式三 $mysqli = new mysqli($host, $username, $password, $database); // 获取连接产生的错误编号和错误信息 if($mysqli->connect_errno){ die($mysqli->connect_error); } // 关闭链接 $mysqli->close();
3、获取信息
// 客户端信息 echo $mysqli->client_info . PHP_EOL; echo $mysqli->get_client_info(). PHP_EOL; // 客户端版本 echo $mysqli->client_version . PHP_EOL; // 服务端信息 echo $mysqli->server_info . PHP_EOL; echo $mysqli->get_server_info() . PHP_EOL; // 服务端版本 echo $mysqli->server_version . PHP_EOL;
4、实现sql查询
// @取消警告Warning $mysqli = @new mysqli($host, $username, $password, $database); // 获取连接产生的错误编号和错误信息 if($mysqli->connect_errno){ die($mysqli->connect_error); } // 设置编码方式 $mysqli->set_charset('utf8'); // 执行sql $sql = 'insert into student(name, age) values("Tom", 25)'; $res = $mysqli->query($sql); var_dump($res); // bool(true) if($res){ // 获取自增id echo "自增id:" . $mysql->insert_id; echo "插入条数:" . $mysql->affected_rows; } else{ // 获取错误号和错误信息 echo "error" . $mysql->errorno . $mysql->error; } // 返回结果 2种 // select/desc/describe/show/explain 成功返回结果集mysqli_result对象,失败返回false // 其他执行成功返回true,其他返回false // 关闭连接 $mysqli->close();
php和html混写示例
<!-- 定义变量 --> <!-- 替代语法 --> <!-- https://www.jb51.net/article/23252.htm --> <?php $items = ['Tom', 'Jack', 'Steve']?> <!-- 循环输出 --> <?php $i = 1; foreach($items as $item): ?> <li><?php echo $i . ' - '. $item ?></li> <?php $i++; endforeach; ?>
输出结果
1 - Tom 2 - Jack 3 - Steve
示例:执行多条sql
$sql = 'select * from student limit 1;'; $sql .= 'select now()'; $mysqli->multi_query($sql); do{ if($mysqli_result = $mysqli->store_result()){ $rows[] = $mysqli_result->fetch_assoc(); } } while($mysqli->more_results() && $mysqli->next_result()); var_dump($rows);