MySQL

1.5.4 MySQL

MySQL 是开源的关系型数据库,我们介绍它是因为在后面的案例中,需要存储用户信息的时候会用到它。相信很多人在学习数据库的时候都学过 SQL Server,MySQL 和它类似,都支持数据存储和 SQL 语句查询。和 SQL Server 相比,MySQL 显得更轻便简洁,并且移植性更好。对于 MySQL 来说,Windows 的版本和 Linux 的版本使用方法完全一样。

Java 和 .NET 等语言在访问数据库的时候通常都是通过一些封装好的 db connector 或者 driver 实现的,PHP 也一样。PHP 访问 MySQL 的封装库有三种连接方式: ext/mysqli、PDO_MySql 和 ext/mysql。ext/mysqli 是 ext/mysql 的增强版(i 代表 improved),并且 ext/mysql 已经不再做升级了,因此不推荐使用 ext/mysql。表 1-5 详细比较了这三种连接 MySQL 封装库方式的异同。

表1-5 MySQL 的三种 PHP 连接方式的异同

ext/mysqliPDO_MySqlext/mysql
引入的 PHP 版本5.05.03.0之前
PHP5.x 是否包含
MySQL 开发状态活跃在 PHP5.3 中活跃仅维护
在 MySQL 新项目中的建议使用程度建议(首选)建议不建议
API 的字符集支持
服务端 prepare 语句的支持情况
客户端 prepare 语句的支持情况
存储过程支持情况
多语句执行支持情况大多数
是否支持所有 MySQL 4.1 以上功能大多数

本书中使用 ext/mysqli 来访问 MySQL,下面就描述一下如何使用 ext/mysqli。ext/mysqli 的每个函数都包含一个面向对象风格的函数和一个过程化风格函数。这以过程化风格的函数为例进行讲解。连接并发起对 MySQL 数据库的查询,一般有以下几个步骤:
1)使用 mysqli_init 初始化 ext/mysqli,这个函数会返回一个 ext/mysqli 资源,用来做下一个函数的入参。
2)使用 mysqli_real_connect 打开一个对 MySQL 服务器的连接,这个函数需要 MySQL 服务器的地址、端口、数据库名、用户名和密码。
3)使用 mysqli_query 进行查询 SQL 语句的操作。
4)如果上一步中的返回结果是一个数据集(select 操作的返回),可使用 mysqli_fetch_array 获取返回结果集。这个函数有两个参数:第一个参数用于表示 mysqli_query 的返回数据集;第二个参数用于描述 mysqli_fetch_array 的返回是关联数组(MYSQLI_ASSOC)、数值数组(MYSQLI_NUM)或者两种都返回(MYSQLI_BOTH),两种都返回是默认方式,不过我们这里使用第一种方式,只返回关联数组。
5)使用 mysqli_close 关闭和数据库的连接,这个步骤可以省略,因为 PHP 在脚本执行完毕的时候会释放并关闭所有的 fd,其中也包括对数据库的连接。

我们首先创建用来测试的数据库和数据表。登录 phpMyAdmin,然后创建一个名为 test2 的数据库(MySQL 默认会生成一个名为 test 的数据库),如图 1-35 所示。
使用 phpMyAdmin 创建 test2 数据库
图1-35 使用 phpMyAdmin 创建 test2 数据库

数据库创建完成后会进入数据库 test2 的管理界面。在管理界面中选择名为 SQL 的 tab,在输入框中输入建表语句,如图 1-36 所示。
使用 phpMyadmin 创建表 test
图1-36 使用 phpMyadmin 创建表 test

可以看到使用 phpMyAdmin 管理 MySQL 数据库非常方便,现在已经有了数据库和数据表,我们在 zendstudio 中把 test.php 的代码替换成以下形式:

<?php
$conn = mysqli_init();
if(!$conn) {
    echo "mysqli_init error !";
    exit(0);
}
$ret = mysqli_real_connect($conn, "localhost", "root", "root","test2", 3306, "test", MYSQLI_CLIENT_FOUND_ROWS);
if(!$ret) {
    echo "mysqli_real_connect error!";
    exit(0);
}
// 插入记录
$sql = 'insert into test values(1, "tom" )';
$ret = mysqli_query($conn, $sql);
if(!$ret) {
    echo "mysqli_query error!";
    exit(0);
}
// 查询记录
$sql = 'select * from test';
$ret = mysqli_query($conn, $sql);
// 获取查询结果
while (($row = mysqli_fetch_array($ret, MYSQLI_ASSOC)) != NULL)
{
echo "id: " . $row['id'] . "<BR>";
echo "name: " . $row['name'] . "<BR>";
}
?>

在 Chrome 中执行上面的程序,结果如图 1-37 所示。
数据库操作示例的执行结果
图1-37 数据库操作示例的执行结果

我们在程序的最后并没有调用mysqli_close,这也是大部分的脚本的做法。当然如果你坚持认为这样不好,并一定要加上它,那也是没有问题的。

下一节 1.5.5 HTML5
上一节 1.5.3 XML
返回微信公众平台应用开发实战

天香空城微信二维码
关注 天香空城 微信号 ulisse 或扫描二维码,可以了解微信营销书籍
微信营销书评
微信公众平台开发源码

返回微信营销