MYSQL 是一个开源的、跨平台关系型数据库管理系统,PHP 是一个开源的、跨平台的脚本语言,PHP 扩展包对MYSQL 支持比较完善,也有比较多开源包供参考, 很多开源项目与 MYSQL 搭配也比较多,因此 PHP+MYSQL 是一套应用极为广泛的方案,下面我们通过代码来了解如何使用 PHP 操作 MYSQL 数据库。
连接数据库服务器
mysqli_connect()
函数打开一个到 MySQL 服务器的新的连接,它的语法如下:
|
|
参数 | 描述 |
---|---|
host | 可选。规定主机名或 IP 地址。 |
username | 可选。规定 MySQL 用户名。 |
password | 可选。规定 MySQL 密码。 |
dbname | 可选。规定默认使用的数据库。 |
port | 可选。规定尝试连接到 MySQL 服务器的端口号。 |
socket | 可选。规定 socket 或要使用的已命名 pipe。 |
它的返回值是一个代表 MySQL 服务器连接的对象。
示例如下:
|
|
连接SQL数据库
mysqli_select_db()
函数用于指定要获取的服务器上的某一个数据库。语法如下:
|
|
参数 | 描述 |
---|---|
connection | 必需。规定要使用的 MySQL 连接。 |
dbname | 必需,规定要使用的默认数据库。 |
它的返回值是bool类型,如果连接数据库成功则返回 TRUE,如果失败则返回 FALSE。
示例如下:
|
|
读取SQL数据库
mysqli_query()
函数执行某个针对数据库的查询。语法如下:
|
|
参数 | 描述 |
---|---|
connection | 必需。规定要使用的 MySQL 连接。 |
query | 必需,规定查询字符串。 |
resultmode | 可选。MYSQLI_USE_RESULT(数据较多)MYSQLI_STORE_RESULT(默认) |
针对成功的 SELECT、SHOW、DESCRIBE 或 EXPLAIN 查询,将返回一个 mysqli_result 对象。
针对其他成功的查询,将返回 TRUE。如果失败,则返回 FALSE。
实例如下:
|
|
获取SQL条目数
mysqli_num_rows()
函数返回结果集中行的数量,它的语法如下:
|
|
参数 | 描述 |
---|---|
result | 必需。由 mysqli_query()、mysqli_store_result() 或 mysqli_use_result() 返回的结果集标识符。 |
示例如下:
|
|
MySql 语句中也集成了获取条目数的函数 COUNT()
,它的语法如下:
|
|
示例如下:
|
|
COUNT()
因为是 SQL 的原生语句,效率要比 PHP 的 mysqli_num_rows()
高很多,也可以配合 WHERE & AND & OR 进行查询。
SQL转数组
mysqli_fetch_array()
函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。它的语法如下:
|
|
参数 | 描述 |
---|---|
result | 必需。由 mysqli_query() mysqli_store_result() mysqli_use_result() 返回的结果集标识符。 |
resulttype | 可选。规定产生哪种类型的数组。MYSQLI_ASSOC MYSQLI_NUM MYSQLI_BOTH。 |
示例如下:
|
|
mysqli_fetch_assoc()
函数从结果集中取得一行作为关联数组。它的语法如下:
|
|
参数 | 描述 |
---|---|
result | 必需。规定由 mysqli_query() mysqli_store_result() mysqli_use_result() 返回的结果集标识符。 |
它的输出结果等同于 mysqli_fetch_array($result, MYSQLI_ASSOC);
需要注意的是,两者返回的都是单条数据,如需获得数据库全部数据,需要循环遍历,示例如下:
|
|
查询SQL数据
以下示例是一个用 PHP 实现查询数据库的程序,首先设定数据库服务器链接,账户,密码的默认值:
|
|
创建一个方法,获得并返回数据库的对象:
|
|
使用 HTML 创建表格,获得所有 name 列为 ZhangSan 的行,并按 id 逆序排序:
|
|
添加SQL数据
建立一个PHP页面,展示数据库里的所有数据,并新建一个链接,指向数据库添加页面:
|
|
创建一个 HTML 页面,并添加输入框和提交按钮,将输入框的文本用 POST 方式传给 user_add.php
:
|
|
使用 SQL 语句向数据库添加数据,如果没有添加错误,转跳到 data_all.php
:
|
|
SQL防注入
在上面的示例中,如果 $name & $age
没有使用 ''
和 intval
进行格式转换,那么当用户输入的是SQL语句时 ,它有可能会被执行,所以对用户传入的值一定要进行相应的格式处理,避免被恶意注入 SQL 语句。
修改SQL数据
在 data_all.php
中添加一列,命名为修改,单元格内添加链接,指向 edituser.php
,并使用 GET 方式将此单元格的 id
进行传输:
|
|
获取此行的所有数据,并创建输入框和提交按钮,将获取的行数据填充为输入框默认数据,创建的表单将以 POST 方式将数据传输到 edituser_server.php
:
|
|
获取 edituser.php
中传输过来的数据,按 id
定位到目标行并进行修改,如没有报错则转跳到 Location:data_all.php
:
|
|
删除SQL数据
在 data_all.php
中添加一列,命名为删除,单元格内添加链接,指向 deleteuser.php
,并使用 GET 方式将此单元格的 id
进行传输:
|
|
获取 data_all.php
中传输过来的 id
,按 id
定位到目标行并删除,如没有报错则转跳到 Location:data_all.php
:
|
|