[TOC]
>[success]MySQL增强版扩展,MySQLi 函数允许您访问 MySQL 数据库服务器。MySQLi 扩展被设计用于 MySQL 4.1.13 版本或更新的版本,MySQLi提供面向过程和面向对象两种接口
## 查看是否支持
通过phpinfo()查看是否成功加载
>[danger]注意:如果没加载,可以去php.ini看是否开启该扩展,如果前面有分号去掉。
注意:如果没有该扩展,百度"php mysqli扩展安装",有很多场景下的解决方案。
## 操作mysql流程
1. 建立mysql联接
2. 发送查询SQL
3. 从结果集中取出数据
4. 释放资源
5. 关闭数据库连接
## 面向对象风格使用mysqli
### 实例mysqli对象,建立连接
~~~
$mysqli = @new mysqli("localhost", "my_user", "my_password", "world");
~~~
返回创建后的数据链接对象
### 错误信息反馈(对象属性)
~~~
int $mysqli->connect_errno返回链接错误代码
string $mysqli->connect_error;返回链接错误文本
int $mysqli->errno返回最近函数调用的错误代码
string $mysqli->error;返回最近函数调用的错误文本
~~~
### 发送查询
~~~
mixed $mysqli->query (string $query )
~~~
对数据库执行一次查询
### 通过结果集取数据
~~~
mysqli_result::fetch_row()
~~~
取得一行以索引数组形式返回的数据
~~~
mysqli_result::fetch_assoc()
~~~
取得一行以关联数组形式返回的数据
~~~
mysqli_result::fetch_object()
~~~
取得一行以对象形式返回的数据
~~~
mysqli_result::fetch_array($type)
~~~
参数为返回结果的类型
参数:(MYSQLI_ASSOC 返回关联数组 MYSQLI_NUM 返回索引数组 MYSQLI_BOTH 返回关联不索引数组)
### 释放结果内存
~~~
mysqli_result::free()
~~~
从内存中释放结果集
### 关闭链接
~~~
mysqli::close()
~~~
函数关闭非持久的 MySQL 连接。
### 结果集数量
~~~
mysqli_result::num_rows
~~~
### 自增ID
~~~
mixed $mysqli->insert_id
~~~
### 受影响数量
~~~
int $mysqli->affected_rows;
~~~
## MySQLi_STMT类(预准备)
### 预准备语句
每一条SQL的执行过程包括分析、编译、优化查询等操作,如果只是 SQL的参数不同而其他项一样,那么可以想象,数据库做了很多次重 复的分析、编译、优化操作,显然这种执行方式会降低效率。如果使 用预准备方式操作,这种分析、编译、优化的操作只需要执行一次, 以后只是参数的不同,这样效率会更快
先将SQL提交到MySQL服务器,预先解析,事后可以只传递参数到 MySQL服务器,减少解析次数、提高MySQL处理效率。
同时由于参数不是随着SQL一起发送到服务器端,所以屏蔽了SQL 注入等等的危险操作
### 绑定参数
可以事先在预先解析的SQL上指定占位符?号来为后面传递的值预 留空间位,可以把?想象成函数的形参这样更好理解
## 常用函数语法
### 产生预准备对象
~~~
mysqli_stmt mysqli::stmt_init ( void )
~~~
初始化一条语句并返回一个用于mysqli_stmt_prepare(调用)的对象
~~~
mysqli_stmt mysqli::prepare ( $sql )
~~~
### 提交一个要执行的sql
~~~
mixed mysqli_stmt::prepare ( string $query )
~~~
### 绑定参数
~~~
bool mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$... ] )
~~~
### 执行预准备查询
~~~
bool mysqli_stmt::execute ( void )
~~~
### 受影响数量
~~~
int $mysqli_stmt->affected_rows
~~~
### 错误代码
~~~
int $mysqli_stmt->errno
~~~
### 错误信息
~~~
int $mysqli_stmt->errno
~~~
### 最后插入的ID
~~~
int $mysqli_stmt->insert_id
~~~
**完整实例**
~~~
<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
//?占位符
$stmt->bind_param('sssd', $code, $language, $official, $percent);
//sssd,前三个是字符串,最后一个是小数
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
/* execute prepared statement */
$stmt->execute();
printf("%d Row inserted.\n", $stmt->affected_rows);
/* close statement and connection */
$stmt->close();
/* Clean up table CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Row deleted.\n", $mysqli->affected_rows);
/* close connection */
$mysqli->close();
?>
~~~
## 绑定参数类型参考
<table class="">
<caption><strong>Type specification chars</strong></caption>
<thead>
<tr>
<th>Character</th>
<th>Description</th>
</tr>
</thead><tbody class="tbody">
<tr>
<td>i</td>
<td>corresponding variable has type integer</td>
</tr><tr>
<td>d</td>
<td>corresponding variable has type double</td>
</tr><tr>
<td>s</td>
<td>corresponding variable has type string</td>
</tr><tr>
<td>b</td>
<td>corresponding variable is a blob and will be sent in packets</td>
</tr></tbody></table>
- 序言
- 第一章:准备工作
- 写在学习之前的话
- web应用开发结构
- 开发工具/环境
- 第二章:展现层面(HTML/CSS)
- HTML简介
- HTML基础
- HTML编码
- HTML链接
- HTML图像
- HTML列表
- HTML表单
- HTML表格(分水岭)
- HTML 实体
- HTML框架
- CSS层叠样式表
- CSS选择器
- CSS文本/字体
- CSS继承和叠加
- CSS框模型
- CSS浮动(分水岭)
- CSS定位
- CSS背景
- CSS图标字体
- CSS补充
- 开发技巧
- 第三章:展现层面(Javascript)
- JS简介
- JS实现
- JS输出交互
- JS变量
- JS数据类型
- JS运算符
- JS流程控制(分水岭)
- JS函数
- JS数组
- JS对象(分水岭)
- JS数组对象
- JS字符串对象
- JS数学对象
- JS日期对象
- JS BOM对象(分水岭)
- JS DOM对象
- JS事件对象
- JS元素对象
- JS DOM节点
- 第四章:展现层面(Jquery)
- JQ简介
- JQ使用
- JQ选择器
- JQ筛选
- JQ属性
- JQ-CSS
- JQ事件
- JQ文档处理
- JQ效果
- JQ-ajax
- 第五章:逻辑/业务层面(PHP)
- PHP简介
- PHP变量
- PHP数据类型
- PHP常量
- PHP运算符
- PHP流程控制
- PHP函数(分水岭)
- PHP日期
- PHP数学
- PHP数组
- PHP字符串
- PHP正则表达式(分水岭)
- PHP目录操作
- PHP文件
- PHP上传/下载
- PHP面向对象(分水岭)
- PHP图像处理
- PHP会话控制
- Ajax异步处理
- PHPMysql扩展
- PHPMysqli扩展
- PHPPdo扩展
- PHP接口
- PHP命名空间
- 第六章:逻辑/业务层面(框架设计)
- 第七章:存储层面(mysql)
- Mysql基础
- Mysql Sql简介
- Mysql数据库
- Mysql数据类型
- Mysql数据表
- Mysql操作记录
- Mysql查询
- Mysql修改表结构
- Mysql日期与时间
- Mysql分组统计
- Mysql多表查询
- Mysql安全
- Mysql存储引擎
- Mysql事务
- Mysql视图
- Mysql触发器
- Mysql存储过程
- Mysql存储函数
- Mysql优化
- 第八章:服务器(Linux)
- Linux介绍与安装
- Shell
- 目录与文件操作
- VIM编辑器使用
- 帐号管理
- SUDO
- 权限控制
- 压缩与打包
- 软件安装
- 计划任务
- 进程管理
- 宝塔Linux面板