Windows XP下PHP+MySQL环境搭建(5)
安装 MySQL
下载 MySQL
进行到这一步,下载和安装软件应该属于常规任务了。要安装 MySQL,在线访问 MySQL Web 站点。 您将在顶部看到几个选项卡;单击 Developer Zone 选项卡来打开其下的子菜单。单击 Downloads。向下滚动并选择 MySQL 4.1 GA release(参见图 10)。
此链接会带您进入 MySQL 4.1 页面,然后您可以选择面向您的平台的下载。因为在本教程中使用的是 Windows,所以请向下滚动到 Windows 下载,然后寻找 Windows (x86)。寻找靠近此行的 Pick a mirror 链接(确保不要选择 Windows Essentials 或 Without installer)。系统会提示您提供一些信息;如果您有时间,请填写此表格,因为它将有助于 MySQL 组织。总之,您随后只需选择一个镜像站点并开始下载即可。当我写作本文时,此文件的名称是 mysql-4.1.11-win32.zip。下载了此文件之后,就可以开始安装了。
安装 MySQL
打开下载的 zip 文件,解压缩安装程序(setup.exe)。双击扩展的安装程序,安装就会开始。首先需要选择安装类型:
Typical:安装 MySQL 最常用的选项。基本上是让 MySQL 为您做出选择。
Complete:完全安装。安装 MySQL 的全部内容。
Custom:面向像我一样有控制欲望的人,这将允许您调整每种可能的选项。
虽然我通常推荐 Custom 选项,但是设置开发环境还是选择 Typical 选项比较好。在下一个屏幕中确认您的选择,然后选择 Install。在安装过程中您可以休息一下。
接下来,可以登录或创建一个新的 MySQL.com 帐户。是注册、登录或跳过此步骤由您决定(我自己有一个帐户)。完成此步之后,安装操作就完成了。最后一个选项是立即启动和配置 MySQL,您应该选择此选项。
配置 MySQL 实例
安装完成之后,MySQL 会启动 MySQL Server Instance Configuration Wizard。(您可以通过 Start > Programs > MySQL > MySQL 4.1 > MySQL Server Instance Config Wizard访问此程序。)选择 Detailed Configuration 选项来开始使用向导。
服务器类型,选择 Developer Machine;正如此向导所声明的那样,这是面向您在其中开发代码、且必须运行几个其他应用程序(例如 Apache)的机器的正确选择。数据库,选择 Multifunctional Database 选项(同样,这是常见的选择且能够很好地工作,因为您将使用 MySQL 进行各种不同的操作)。
接下来,设置 InnoDB 表空间的目录。如果您阅读了这里的小号字体部分,您将意识到只需单击 Next 然后接受默认设置即可,这也是我推荐的操作。下一个屏幕提示您选择连接数。您应该或者选择 Decision Support (此选项假设约 20 个连接),或者选择 Manual Setting ,然后选择一个较低的数字。因为只有我一个人使用我的机器,且我只将 MySQL 用于 Web 应用程序,所以我选择 Manual,并将并发连接数设为 10(此数字可能仍然高于我真正需要的数字)。我建议您考虑类似的设置。
您应该选择启用 Enable TCP/IP Networking 选项,默认端口 3306 就可以了。您还应该接受 Standard Character Set,除非您有充分的理由使用 UTF8(我的应用程序中不使用其他语言,但是如果您的应用程序中使用其他语言,请选择 UTF8)。
下一个屏幕有一些重要的选项。首先,将 MySQL 安装为 Windows 服务,并确保选中了 Launch the MySQL Server automatically 选项。这将确保当机器重启时,MySQL 也会启动;Apache 已经进行了相同的设置,因此这么做是合理的。另外,选中 Include Bin Directory 选项;这确保您能够运行 MySQL 工具,而无需浪费时间来手动处理 PATH。
下一步是设置根密码;请选择一个密码。我强烈建议您不要 创建匿名帐户。这不是个好主意,既然这样,在开发环境中最好不要设置匿名帐户。
最后,选择 Execute 来使对数据库进行的所有这些设置生效。此处理完成之后,可以选择 Finish 退出实例配置。现在,数据库已经准备好可以使用了。
创建一个新数据库
现在,需要在 MySQL 安装上创建一个新数据库。因为已经在 PATH 中设置了 MySQL 脚本,所以这很容易。打开一个命令提示符窗口(选择 Start > Run 并在 Run 对话框中输入 cmd),然后输入以下命令:
mysqladmin -u root -p create DB-DEVEL
输入您选择的密码,并单击 Enter。除非出现问题,否则不会从 MySQL 获得任何反馈(这有点令人困扰)。在您继续检查之前,先来了解一下您刚才所进行的操作。
mysqladmin 是 MySQL 的管理工具。它位于 MySQL 的 bin/ 目录中,此目录已被配置向导添加到系统的 PATH 中,因此可以直接访问此程序(就像我们在本文中所做的一样)。
-u root 告诉 MySQL 作为根用户登录,您之前应该已经为根用户设置了密码。如果不使用此选项,MySQL 会尝试作为 ODBC@localhost 用户登录;而这是没有用的,因为此用户并不存在!
-p 指示 MySQL 提示您输入密码。您可以在命令行中输入密码,但是此密码不是隐藏的 (******),这不是一个好做法。您应该尽量为所有的 MySQL 交互使用 -p 标记。
create DB-DEVEL 告诉命令应该进行的操作;在本例中,它指示 MySQL 创建一个名为 DB-DEVEL 的新数据库。我个人给我的数据库名称加上 "DB" 作为前缀,用来提醒我这是一个数据库,而 DEVEL 指的是开发 (development);如果您愿意,可以使用其他数据库名称。
因为 MySQL 不会提供太多的反馈,所以应该确保此命令确实有效。要启动 MySQL 监视器,请在命令行中输入 mysql -u root -p。输入根密码后,将看到类似以下的内容:
C:\>mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.1.11-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
您将在这里进行大多数数据库操作 —— 从创建表到输入数据。要确保您刚才创建的数据库确实 被创建了,请输入 use DB-DEVEL。 use 告诉 MySQL 切换到指定的数据库。如果一切正常,您将看到以下输出:
C:\>mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.1.11-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use DB-DEVEL
Database changed
mysql>
如果此数据库不存在,您会看到以下错误信息:ERROR 1049 (42000): Unknown database 'DB-DEVEL'。请返回到之前的操作步骤并再次尝试,直到您创建了数据库为止。然后重新回到本步骤,继续进行。一旦您验证了数据库确实存在,就可以输入 exit 来离开 MySQL 监视器。
添加表
创建了数据库之后,就可以向其中添加几个简单的表和数据,以便在 PHP 测试中使用。创建一个新的文本文件,并将其命名为 create-sample-tables.sql。此文件的内容应该类似以下内容:
CREATE TABLE users (
user_id INT NOT NULL,
username TEXT(8) NOT NULL,
firstname TEXT(35) NOT NULL,
lastname TEXT(50) NOT NULL,
PRIMARY KEY (user_id)
);
CREATE TABLE user_websites (
website_id INT NOT NULL,
user_id INT NOT NULL,
website_url TEXT NOT NULL,
PRIMARY KEY (website_id)
);
这会创建一个名为 users 的表和一个名为 user_websites 的表。其余部分的含义是显而易见的。您现在可通过如下方式将此文件馈送到 MySQL:
C:\>mysql -u root -p DB-DEVEL < create-sample-tables.sql
Enter password: ********
此命令的前一部分应该是您所熟悉的内容。我将 DB-DEVEL 添加到末尾,这会告诉 MySQL 启动并连接到指定的数据库(一个登录的快捷方式,然后输入 use DB-DEVEL;)。然后,< 符号告诉 MySQL 接受您刚才创建的 SQL 文件作为输入。不幸的是,MySQL 仍然不会提供任何反馈(除非有错误发生)。在任何情况下,您都可将沉默视作通过。
同样,请检查您的工作。通过 mysql -u root -p DB-DEVEL 登录到 MySQL 监视器,然后输入 describe users;。您应该会看到一个对所创建的表的文本描述:
mysql> describe users;
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| user_id | int(11) | | PRI | 0 | |
| username | tinytext | | | | |
| firstname | tinytext | | | | |
| lastname | tinytext | | | | |
+-----------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)
您可以对 user_websites 表进行相同的操作:
mysql> describe user_websites;
+-------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------+------+-----+---------+-------+
| website_id | int(11) | | PRI | 0 | |
| user_id | int(11) | | | 0 | |
| website_url | text | | | | |
+-------------+---------+------+-----+---------+-------+
3 rows in set (0.00 sec)
最后,在这里添加一些简单的数据。创建以下文件,并将其命名为 insert-sample-data.sql:
INSERT INTO users VALUES (1, 'bmclaugh', 'Brett', 'McLaughlin');
INSERT INTO users VALUES (2, 'gqg10012', 'Gary', 'Greathouse');
INSERT INTO users VALUES (3, 'reckstei', 'Bob', 'Eckstein');
INSERT INTO users VALUES (4, 'mikeh', 'Mike', 'Hendrickson');
INSERT INTO user_websites VALUES (1, 1, 'http://www.newInstance.com');
INSERT INTO user_websites VALUES (2, 1, 'http://www.oreilly.com');
INSERT INTO user_websites VALUES (3, 4, 'http://www.oreilly.com');
同样,这也非常直接。通过以下命令将此脚本馈送到 MySQL:
C:\>mysql -u root -p DB-DEVEL < insert-sample-data.sql
Enter password: ********
现在,登录到数据库来确认这些数据位于正确的位置:
C:\>mysql -u root -p DB-DEVEL
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 16 to server version: 4.1.11-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select * from users;
+---------+----------+-----------+-------------+
| user_id | username | firstname | lastname |
+---------+----------+-----------+-------------+
| 1 | bmclaugh | Brett | McLaughlin |
| 2 | gqg10012 | Gary | Greathouse |
| 3 | reckstei | Bob | Eckstein |
| 4 | mikeh | Mike | Hendrickson |
+---------+----------+-----------+-------------+
4 rows in set (0.00 sec)
可以对 user_websites 表执行相同的检查,并应该得到类似的结果。设置好一些示例数据之后,现在需要做的全部工作就是编写一些 PHP 代码来将数据库和您的 Web 站点连接起来。
将 MySQL 支持添加到 PHP
在编写任何代码之前,您必须告诉 PHP 加载 MySQL 所需的库。可通过您在 在 Windows 上安装 PHP 部分中设置的 php.ini 文件实现此操作。打开此文件,并查找以下代码行:
;extension=php_mysql.dll
此代码行告诉 PHP 加载 MySQL DLL(动态链接库),这会允许您的 PHP 脚本使用 MySQL 命令。然而,此代码行前面的 ; 是注释指示符;请移除它以便使此代码行类似以下内容:
extension=php_mysql.dll
现在,进入命令行,并尝试通过 -i 切换符运行 PHP 解释器,它会告诉您加载了哪些模块:
C:\>c:\php\php -i
您可能会在这里得到类似以下内容的错误信息:
PHP Startup: Unable to load dynamic library 'C:/foo/ext/php_mysql.dll' -
The specified module could not be found.
注意:为了便于显示,以上消息可能以多行的形式显示。
别担心。这没问题。PHP 现在正在搜索 MySQL 库,但是不知道如何找到它们。请再次打开 php.ini 并搜索 extension_dir。您需要使此条目类似如下内容:
; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:/PHP/ext/"
这会告诉 PHP 在 C:/PHP/ext/ 目录中搜索 php_mysql.dll 模块;如果查看此目录,就会看到此文件。保存 php.ini 并尝试再次运行 php -i 。如果一切均被正确地设置了,那么您将得到关于解释器的大量信息。这就是所想要的内容。您甚至可以向上滚动来查看一些 MySQL 配置数据,如图 11 所示。
现在,您就可以编写一些 PHP 代码了。
在 PHP 脚本中连接到 MySQL
您已经设置好了 Apache、运行了 PHP、安装了 MySQL,并且已经将 MySQL 扩展加载到了 PHP 中,现在您终于可以编写 PHP 代码了。关闭所有这些配置文件,并打开一个新的空文件。输入以下文本:
<html>
<head><title>MySQL Connection Test</title></head>
<body>
<?php
$conn = @mysql_connect("localhost", "root", "your-password");
if (!$conn)
die("<p>Error connecting to MySQL: <i>" . mysql_error() . "</i></p>");
echo("<p>Connected to Database Successfully.</p>");
if (!@mysql_select_db("DB-DEVEL", $conn))
die("<p>Error selecting DB-DEVEL database: <i>" . mysql_error() . "</i></p>");
echo("<p>Selected DB-DEVEL database successfully.</p>");
mysql_close ($conn);
echo("<p>Disconnected</p>");
?>
</body>
</html>
如果您对编写 PHP 代码不是很熟悉的话,那么这些内容对您来说太复杂了,但是它实际上非常简单:
mysql_connect 试图通过所提供的主机名、用户名和密码连接到一个 MySQL 数据库。确保您使用真实的密码来替换 your-password 。
die 生成错误消息,并停止进一步的 PHP 处理。它在 conn 变量出现错误时(即 mysql_connect 不成功的情况)使用。
echo 的作用和它的含义一样;它生成文本(在本例中,它生成 HTML)。
mysql_select_db 试图通过您传递给它的连接对象(代表到数据库的连接的 conn 对象)来切换到所提供的数据库。
mysql_close 哦,您可以自己猜出它的作用。
正如您所看到的,确保开发环境正常工作并不需要很多的代码。将此脚本保存为 test-connect.php,放到和其他 Web 文件(例如 index.php)相同的目录下,然后运行它。最后,在您的 Web 浏览器中加载此文件:http://localhost/test-connect.php。您应该看到如图 12 所示的内容。
如果您的测试成功了,就祝贺一下自己吧!您已经安装了 Apache、PHP 和 MySQL,甚至有了一个到数据库的有效连接。您就要大功告成了。剩下要做的只是连接到示例数据,并确保能够正确检索数据。
通过 PHP 从 MySQL 检索数据
在结束之前,我希望向您快速介绍一下如何连接到 MySQL,并从数据库中检索行。我不会涉及细节问题(本文不是 PHP 教程),我只希望给您提供一个用于运行的示例脚本来确保一切正常。它也将是您开始编写您自己的定制 PHP 代码的一个很好的起点。将此文件保存为 list-users.php。
<html>
<head><title>Listing of Users in Database</title></head>
<body>
<?php
$conn = @mysql_connect("localhost", "root", "seth0723");
if (!$conn)
die("<p>Error connecting to MySQL: <i>" . mysql_error() . "</i></p>");
if (!@mysql_select_db("DB-DEVEL", $conn))
die("<p>Error selecting DB-DEVEL database: <i>" . mysql_error() . "</i></p>");
?>
<table border="1">
<tr><th>Username</th><th>Full Name</th><th>Website</th></tr>
<?php
$select = ' SELECT u.username, u.firstname, u.lastname, w.website_url';
$from = ' FROM users u, user_websites w';
$where = ' WHERE u.user_id = w.user_id';
$order = ' ORDER BY u.lastname, u.firstname';
$users = @mysql_query($select . $from . $where . $order);
if (!$users) {
echo('</table>');
die('<p>Error retrieving users from database!<br />'.
'Error: ' . mysql_error() . '</p>');
}
while ($user = mysql_fetch_array($users)) {
$user_username = htmlspecialchars($user['username']);
$user_firstname = htmlspecialchars($user['firstname']);
$user_lastname = htmlspecialchars($user['lastname']);
$user_website = htmlspecialchars($user['website_url']);
echo("<tr>\n");
echo("<td>$user_username</td>\n");
echo("<td>$user_firstname $user_lastname</td>\n");
echo("<td><a href=\"$user_website\">$user_website</a></td>\n");
echo("</tr>\n");
}
?>
</table>
<?php
mysql_close ($conn);
?>
</body>
</html>
这个简单的 PHP 页面会连接到 MySQL 数据库、切换到 DB-DEVEL 表,并拉出具有 Web 站点 URL 的所有用户。它没有浮华的界面,其格式看起来非常简单,但是它说明了一点:通过 PHP 访问 MySQL 数据非常容易。图 13 显示了此脚本的运行结果。
图 13. 具有 Web 站点 URL 的用户的 HTML 清单
好了!您的开发环境已经设置好可以使用了。