mysqli扩展的安装
- 打开 php 配置文件 php.ini,开启 extension=php_mysqli.dll
- 配置 extension_dir="ext文件所在目录"(ext 即 extension 缩写,例:xampp默认路径 extension_dir="C:\xampp\php\ext")
- 重启服务器
- 执行 phpinfo(); 如图即配置成功
- 另一种验证方式 extension_loaded('mysqli') 返回 true 即加载成功; function_exists('mysqli_connect') 返回 true 也是加载成功; get_loaded_extension() 返回是已经安装好的php扩展的数组
学习步骤
以下学习以面向对象为主,面向过程次之
- 建立到MySQL连接
- 打开指定的数据库
- 设置默认客户端的字符集
- 执行SQL查询
- 释放结果集
- 关闭连接
建立连接与打开指定数据库
$mysqli = new mysqli('localhost', 'root', 'password'); // 得到mysqli对象
$mysqli->select_db('db_name');
复制代码
另一种连接方法
$mysqli = new mysqli();
$mysqli->connect('127.0.0.1', 'root', 'password'); // 同样可以得到mysqli对象
$mysqli->select_db('db_name');
复制代码
也可以建立连接的同时直接打开数据库
$mysqli = new mysqli('localhost', 'root', 'password', 'db_name'); // 第四个参数为数据库名字
复制代码
连接失败时
if(mysqli->connect_errno){ // connect_errno 产生错误编号
die('Connect Error: ' . $mysqli->connect_error); // connect_error 产生错误信息 这两个是属性 不带()
}
复制代码
获取客户端信息如下
$mysqli->client_info; // 上面是属性 下面是方法 都可以获得客户端信息
$mysqli->get_client_info(); // 同理 server_info 是服务端信息
复制代码
设置字符集
$mysqli->set_charset('utf8');
复制代码
关闭连接
$mysqli->close();
复制代码
执行SQL查询
$sql = 'CREATE TABLE IF NOT EXISTS table_name(
id tinyint unsigned auto_increment key,
username varchar(20) not null
);';
$res = $mysqli->query($sql); // 成功返回true
复制代码
执行 select/desc/describe/show/explain 时 成功返回 mysqli_result 对象 失败返回false 其他语句成功返回true 失败返回false
// 插入操作
$sql = "INSERT table_name(username, password) VALUES('wangjiaqun', '123')"; // 插入单条
$sql = "INSERT table_name(username, password) VALUES('wangjiaqun', '123'), ('lishipeng', '123'), ('huliyuan', '123'), ('hejinhu', '123')"; // 插入多条
$res = $mysqli->query($sql);
if($res){
// 得到插入成功产生的AUTO_INCREMENT的值
echo '恭喜您,您是本站第' . $mysqli->insert_id . '位用户';
echo '有' . $mysqli->affected_rows . '记录被影响';
// affected_rows 属性值有三种
// 1.受影响记录条数
// 2.-1代表SQL语句有问题
// 3.0代表没有生效
} else {
// 错误信息
echo 'ERROR' . $mysqli->errno . ': ' . $mysqli->error;
}
复制代码
// 更新操作
$sql = "UPDATE table_name SET age=age+10";
$res = $mysqli->query($sql);
复制代码
// 删除操作
$sql = "DELETE FROM table_name WHERE age >= 6";
$res = $mysqli->query($sql);
复制代码
// 查询操作
$sql = "SELECT id, username, password FROM table_name";
$mysqli_result = $mysqli->query($sql); // 返回结果集对象,不是查询得到的数据
if($mysqli_result && $mysqli_result->num_rows > 0){
$row = $mysqli_result->fecth_all(); // 获取结果集中所有记录 默认返回二维数组
$row = $mysqli_result->fetch_all(MYSQLI_NUM); // 索引 + 索引
$row = $mysqli_result->fetch_all(MYSQLI_ASSOC); // 索引 + 关联
$row = $mysqli_result->fetch_all(MYSQLI_BOTH); // 索引 + 索引关联
$row = $mysqli_result->fetch_row(); // 获取一行数据 作索引数组返回
$row = $mysqli_result->fetch_assoc(); // 获取一行数据 作关联数组返回
$row = $mysqli_result->fetch_array(); // 获取一行数据 默认返回二者都有
$row = $mysqli_result->fetch_object(); // 获取一行数据 返回对象
$mysqli_result->data_seek(0); // 移动结果集内部的指针 0代表移到第一条
} else {
// 错误信息
}
复制代码
// 释放结果集
$mysqli_result->free();
$mysqli_result->free_result;
$mysqli_result->close; // 它和关闭连接不一样 关闭连接时$mysqli方法 这个是$mysqli_result的属性
复制代码
多条SQL语句执行
$sql = "INSERT table_name(username, password) VALUES('wangjiaqun', '123')";
$sql .= "UPDATE table_name SET age = 100 WHERE id = 28";
$mysqli->multi_query($sql); // 只有SQL语句成功时才会往下执行 哪里失败哪里停止
// 上面是增删改相关 如果都是查询 如下
// use_result() / store_result() 获取第一条产生的结果集
// more_results() 检测是否有更多的结果集
// next_result() 将结果集指针向下移一位
if($mysqli->query($sql){
do{
if($mysqli_result = $mysqli->store_result()){
$row[] = $mysqli_result->fetch_all(MYSQLI_ASSOC);
}
} while($mysqli->more_results() && $mysqli->next_result())
} else {
echo mysqli->error;
}
复制代码