当前位置:网站首页>PHP基础知识 - PHP 使用 MySQLI
PHP基础知识 - PHP 使用 MySQLI
2022-07-28 06:58:00 【Chon.Wang】
一、PHP 使用 MySQLI
列举一些常用的 MySQLI 使用方法。本文需要你提前了解一些基本的
MySQL 增删改查语句知识。本文不作任何安全或验证方面的处理, 只列举示例。
1.0 MySQLI 执行 MySQL 语句
# 使用 query() 方法运行 MySQL 语句
对象->query($sql_string);
1.1 连接 MySQL 与创建数据库与数据表
# 本文不作任何安全或验证方面的处理, 只记录每个命令的功能。
$server_name = '127.0.0.1'; # 主机名或主机 IP
$username = 'root'; # MySQL 用户名
$password = 'root'; # MySQL 用户密码
$db_name = 'test'; # 测试数据库名
# 1. 创建 mysqli 实例, 连接 MySQL 数据库
$connect_obj = new mysqli($server_name, $username, $password);
# 连接错误码与错误原因
if ($connect_obj->connect_error){
die("连接 MySQL 失败, 错误代码: " . $connect_obj->connect_errno . ', 错误描述: ' . $connect_obj->connect_error);
}
# 2. 创建数据库
$create_database_sql = "CREATE DATABASE {
$db_name}";
$create_database_result = $connect_obj->query($create_database_sql);
# 3. 选择数据库
$select_db_result = $connect_obj->select_db($db_name);
# 4. 创建数据表
$create_table_sql = "CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户的ID', `user_name` varchar(140) NOT NULL DEFAULT '0' COMMENT '姓名', `password` varchar(120) NOT NULL COMMENT '登录密码', `sex` varchar(30) DEFAULT NULL COMMENT '性别', `creattime` varchar(40) NOT NULL COMMENT '创建时间', `is_del` enum('YES','NO') DEFAULT 'NO', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';";
$create_table_result = $connect_obj->query($create_table_sql);
1.2 字符集操作
MySQL常见字符集有四种:BGK、UTF8、utf8mb4、GB2312、Latin1
# 设置默认字符集
$cahrset_result = $connect_obj->set_charset('utf8');
# 获取默认字符集
$character_set_name = $connect_obj->character_set_name();
1.3 新增操作
$insert_sql = "INSERT INTO user (user_name, password, sex, creattime) VALUES ('Leslie','123456','MAN','1658569655')"; # SQL 语句
$insert_result = $connect_obj->query($insert_sql); # 执行 SQL 语句
$inseret_id = $connect_obj->insert_id; # 获取新插入数据的自增 ID
1.4 删除操作
$delete_sql = "DELETE FROM user WHERE id < 5"; # 删除功能的 SQL 语句
$delete_result = $connect_obj->query($delete_sql); # 执行 SQL 语句
$delete_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
1.5 修改操作
$update_sql = "UPDATE user SET user_name = 'Chon' WHERE id = 6"; # 删除功能的 SQL 语句
$update_result = $connect_obj->query($update_sql); # 执行 SQL 语句
$update_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
1.6 查询操作
# 先获取查询结果
$select_all_sql = "SELECT * FROM user where id > 10";
$select_all_result = $connect_obj->query($select_all_sql); # 执行 SQL 语句
1.6.1 获取多条数据
$assoc_all = mysqli_fetch_all($select_all_result, MYSQLI_ASSOC); # 从结果集中取所有行, 以关联数组返回
$num_all = mysqli_fetch_all($select_all_result, MYSQLI_NUM); # 从结果集中取所有行, 以索引数组返回
1.6.2 获取单条数据
# 1. 对象格式
$obj_row = mysqli_fetch_object($select_all_result); # 从结果集中取当前行, 以对象格式返回
# 2. 数组格式 - 关联数组或索引数组
$assoc_row_1 = mysqli_fetch_assoc($select_all_result); # 从结果集中取当前行, 以关联数组返回
$num_row_1 = mysqli_fetch_row($select_all_result); # 从结果集中取当前行, 以索引数组返回
# 3. 数组格式 - 关联数组或索引数组
$assoc_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_ASSOC); # 从结果集中取当前行, 以关联数组返回
$num_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_NUM); # 从结果集中取当前行, 以索引数组返回
1.6.3 获取结果集总数量
$rows_num = mysqli_num_rows($select_all_result);
1.6.4 数据处理
# 常用结果集处理方式, 循环结果集, 一行行处理
# 关联数组格式处理方式, mysql_fetch_assoc 可用 1.6.2 中其它数据获取方式替换
while ($row_array = mysqli_fetch_assoc($select_all_result)){
# 数据的一些处理
}
# 对象格式处理方式
while ($row_object = mysqli_fetch_object($select_all_result)){
# 数据的一些处理
}
1.6.5 释放结果内存
mysqli_free_result($select_all_result);
1.7 事务操作
# 事务 - 第一步: 关闭自动提交
$connect_obj->autocommit(0); # 关闭自动提交
# 事务 - 第二步: CUD 等操作
$result = "SQL 操作"
# 事务 - 第三步: 提交事务或回滚事务
if ($result){
# 如果运行结果正确, 则提交事务
$connect_obj->commit();
} else {
# 如果错误则回滚事务
$connect_obj->rollback();
}
# 事务 - 第四步: 开启自动提交
$connect_obj->autocommit(1);
1.8 获取其它信息
# 返回 MySQL 客户端库版本
$client_info = $connect_obj->get_client_info();
# 返回 MySQL 服务器端版本
$server_info = $connect_obj->get_server_info();
1.9 关闭 MySQL 连接
# 关闭先前的 MySQL 连接
$close_result = $connect_obj->close();
二、实例代码
<?php
# 本文不作任何安全或验证方面的处理, 只列举示例。
$server_name = '127.0.0.1'; # 主机名或主机 IP
$username = 'root'; # MySQL 用户名
$password = 'root'; # MySQL 用户密码
$db_name = 'test'; # 测试数据库名
# 1. 创建 mysqli 实例, 连接 MySQL 数据库
$connect_obj = new mysqli($server_name, $username, $password);
# 错误码与错误原因
if ($connect_obj->connect_error){
die("连接 MySQL 失败, 错误代码: " . $connect_obj->connect_errno . ', 错误描述: ' . $connect_obj->connect_error);
}
# 2. 创建数据库
/* $create_database_sql = "CREATE DATABASE {$db_name}"; $create_database_result = $connect_obj->query($create_database_sql); */
# 3. 选择数据库
$select_db_result = $connect_obj->select_db($db_name);
# 4. 创建数据表
/* $create_table_sql = "CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户的ID', `user_name` varchar(140) NOT NULL DEFAULT '0' COMMENT '姓名', `password` varchar(120) NOT NULL COMMENT '登录密码', `sex` varchar(30) DEFAULT NULL COMMENT '性别', `creattime` varchar(40) NOT NULL COMMENT '创建时间', `is_del` enum('YES','NO') DEFAULT 'NO', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='用户表';"; $create_table_result = $connect_obj->query($create_table_sql); */
# 新增操作
$insert_sql = "INSERT INTO user (user_name, password, sex, creattime) VALUES ('Leslie','123456','MAN','1658569655')"; # SQL 语句
$insert_result = $connect_obj->query($insert_sql); # 执行 SQL 语句
$inseret_id = $connect_obj->insert_id; # 获取新插入数据的自增 ID
# 删除操作
$delete_sql = "DELETE FROM user WHERE id < 5"; # 删除功能的 SQL 语句
$delete_result = $connect_obj->query($delete_sql); # 执行 SQL 语句
$delete_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
# 修改操作
$update_sql = "UPDATE user SET user_name = 'Chon' WHERE id = 6"; # 删除功能的 SQL 语句
$update_result = $connect_obj->query($update_sql); # 执行 SQL 语句
$update_affected_rows = $connect_obj->affected_rows; # 获取最近一条 SQL 语句执行后所影响的行数
# 查询操作 - 开始
# 查询数据
$select_all_sql = "SELECT * FROM user where id > 10";
$select_all_result = $connect_obj->query($select_all_sql); # 执行 SQL 语句
# 1. 获取多条数据
# $assoc_all = mysqli_fetch_all($select_all_result, MYSQLI_ASSOC); # 从结果集中取所有行, 以关联数组返回
# $num_all = mysqli_fetch_all($select_all_result, MYSQLI_NUM); # 从结果集中取所有行, 以索引数组返回
# 2. 获取单条数据
# 1. 对象格式
# $obj_row = mysqli_fetch_object($select_all_result); # 从结果集中取当前行, 以对象格式返回
# 2. 数组格式 - 关联数组或索引数组
# $assoc_row_1 = mysqli_fetch_assoc($select_all_result); # 从结果集中取当前行, 以关联数组返回
# $num_row_1 = mysqli_fetch_row($select_all_result); # 从结果集中取当前行, 以索引数组返回
# 3. 数组格式 - 关联数组或索引数组
# $assoc_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_ASSOC); # 从结果集中取当前行, 以关联数组返回
# $num_row_2 = mysqli_fetch_array($select_all_result, MYSQLI_NUM); # 从结果集中取当前行, 以索引数组返回
# 3. 获取结果集总数量
$num_rows = mysqli_num_rows($select_all_result);
# 4. 数据处理
# 常用结果集处理方式, 循环结果集, 一行行处理
# 关联数组格式处理方式, mysql_fetch_assoc 可用 1.6.2 中其它数据获取方式替换
while ($row_array = mysqli_fetch_assoc($select_all_result)){
# 数据的一些处理
}
# 对象格式处理方式
while ($row_object = mysqli_fetch_object($select_all_result)){
# 数据的一些处理
}
# 5. 释放结果内存
mysqli_free_result($select_all_result);
# 查询操作 - 结束
# 事务 - 开始
# 事务 - 第一步: 关闭自动提交
$connect_obj->autocommit(0); # 关闭自动提交
# 事务 - 第二步: CUD 等操作
$result = "SQL 操作";
# 事务 - 第三步: 提交事务或回滚事务
if ($result){
# 如果运行结果正确, 则提交事务
$connect_obj->commit();
} else {
# 如果错误则回滚事务
$connect_obj->rollback();
}
# 事务 - 第四步: 开启自动提交
$connect_obj->autocommit(1);
# 事务 - 结束
# 返回 MySQL 客户端库版本
$client_info = $connect_obj->get_client_info();
# 返回 MySQL 服务器端版本
$server_info = $connect_obj->get_server_info();
# 关闭先前的 MySQL 连接
$close_result = $connect_obj->close();
边栏推荐
- Mysql-怎么添加用户和设置权限?
- Three different numbers with 0 in leetcode/ array
- Understand CDN
- Prescan quick start to master the track editing path of Lecture 16
- File editing component
- Usage of qmap
- Usage of qcombobox
- PMP practice once a day | don't get lost in the exam -7.13
- QT 怎么删除布局里的所有控件?
- [Qt5] a method of multi window parameter transmission (using custom signal slot) and case code download
猜你喜欢

C#,入门教程——程序运行时的调试技巧与逻辑错误探针技术与源代码

竞赛:糖尿病遗传风险检测挑战赛(科大讯飞)

网口网络水晶头RJ45、POE接口定义线序

c语言中函数的介绍(血书20000字!!!!)

五张图看懂EMI电磁干扰的传播过程-方波陡峭程度对高频成分的影响,时序到频域频谱图形,波形形状对EMI辐射的影响。

MCU IO port controls 12V voltage on and off, MOS and triode circuit

A group of South University students rely on science and technology to go to sea, with an annual income of 1billion
![[leetcode] 24. Exchange nodes in the linked list in pairs](/img/06/af8cffd306777b14a4989e638f5866.png)
[leetcode] 24. Exchange nodes in the linked list in pairs

Common solutions for distributed ID - take one

VK1620温控仪/智能电表LED数显驱动芯片3/4线接口内置 RC振荡器,提供技术支持
随机推荐
Maximum product of leetcode/ word length
Understand CDN
博客搭建七:hugo
No super high-rise buildings | new regulations: what information does it reveal that no new buildings above 500 meters should be built?
js卡通英文字母打字小游戏源码
Three different numbers with 0 in leetcode/ array
Detailed explanation of random number generated by random class
解决EMC、EMI传导干扰的八大方法
SQL function
PHPUnit在Window下如何配置
[Err] 1055 - Expression#2 of select list is not in GROUP BY clause and contains nonaggregated column
GBase 8a MPP与银河麒麟(x86版)完成深度适配
百度智能云九州区县大脑,描绘城乡新蓝图!
2022 Niuke multi school second problem solving Report
EMC EMI磁珠的特性
Can the variable modified by final be modified
Find out whether the number exists from the matrix
[chart component kit] Shanghai daoning provides developers with steema download, trial and tutorial
Half bridge buck circuit - record
优炫数据库导入和导出方法