在传统的主从式数据库架构中,各个Client需通过专门的应用程序才能与后台数据库连接,因而造成Client端软件版本更新、网络连接与传输安全等问题。
而在N-Tiers数据库程序架构中,PHP网页程序与MySQL数据库均存放在主机(服务器)上,任何Client端仅需通过浏览器便可直接访问网页程序。只要网页程序更新,所有Client无须进行任何改动即可与主机网页同步更新,确保所有Client端程序版本一致。因为网页程序与数据库均在服务器端,所以在连接与传输安全上更有保障。
在本章中,我们将说明PHP网页如何运用相关API与MySQL数据库沟通,包括创建连接、执行查询、访问数据并分析查询结果等。
9.1.1 前置作业
在进行PHP与MySQL的连接之前,请注意以下几点:
在php.ini中,是否存在这条语句:extension=php_mysql.dll,以使 MySQL 函数库可以执行。
LAMP个别安装时,是否已拷贝PHP目录中的MySQL相关函数库到系统安装目录的 system32目录下(在Windows 2000 中默认是 C:/WINNT/system32,Windows XP中默认是 C:/WINDOWS/system32)有以下几个:
Ø libmysql.dll
Ø php5ts. dll
Ø php_mysql.dll
Ø php_mysqli.dl
通过libmysql.dll函数库与extension php_mysql.dll函数库,PHP5才能使用MySQL数据库。注意:libmysql.dll 为 MySQL 4.1 之前版本的扩展支持,libmysqli.dll 为 MySQL 4.1 之后版本的扩展支持。
如果要确定你的PHP环境是否可以进行MySQL的连接与操作,请进行下一节的连接检查。
重点整理
在进行PHP与MySQL的连接之前,请确认:
在php.ini中,是否存在这条语句:extension=php_mysql.dll。
是否已拷贝PHP目录中的MySQL相关函数库到系统安装目录的 system32目录下。
9.1.2 连接检查
一开始,我们先执行一个小程序,程序虽小,却包括了创建连接、执行查询与列出查询等要素。若这个程序执行正确,则表示PHP与MySQL连接环境设置无误。
这个程序的目的是列出MySQL数据库中的user表格数据,假设用户root的密码为123456。如果MySQL数据库用户名为root ,但是密码并非123456,请将范例9-1第二行中的 ‘123456’ 改为当前root账号所使用的密码。
请将以下范例9-1的test.php文件,放在(1)个别安装:Apache的htdoc目录下,或(2)单一安装:AppServ的C:/AppServ/www目录下。
范例9-1 连接检查测试范例
打开浏览器,浏览http://localhost/test.php网址,根据系统中账号多寡不同,列出的数据列数也会有所不同,但显示画面应大致如图9-1所示。

图9-1 连接检查范例画面
如果无画面出现或出现错误信息,请检查相关环境设置,并重新测试。如果可以看到如图9-1所示的画面,表示PHP与MySQL环境已经设置完成,可以进行下面的练习。
重点整理
范例test.php文件若执行正确,则表示PHP与MySQL连接环境设置无误。
[php]
- <?php
- $link = mysql_connect("localhost","root","123456");
- //连接
- mysql_select_db('mysql');
- //选择数据库
- mysql_query("SET NAMES 'utf8'");
- //设置编码(需要和本页面的编码一致
- $result = mysql_query("select * from user",$link);
- //下 SQL 指令
- /* 以 HTML Table 方式解析返回数据 */
- echo "<table border=1>/n";
- echo "<tr>/n";
- /* 显示表头 */
- while ($field = mysql_fetch_field($result)) {
- echo "<td>".$field->name."</td>/n";
- }
- echo "</tr>/n";
- /* 显示表身 */
- while ($row = mysql_fetch_row($result)) {
- echo "<tr>/n";
- for($i=0;$i<count($row);$i++){
- echo "<td>".$row[$i]."</td>";
- }
- echo "</tr>/n";
- }
- echo "</table>/n";
- /* 释放 result */
- mysql_free_result($result);
- /* 关闭连接 */
- mysql_close($link);
- ?>