作者:Sam(甄峰) sam_code@hotmail.com
这段时间Sam需要建立一个STB使用的网站。有同事推荐了AppServ,这个软件安装MySQL和Apache,PHP,并自动配置,很是方便。但考虑到未来可能还需要将LUA,Perl,ASP等。还是自己依次安装配置更有可控性。
因为IIS要支持PHP,所以需要对IIS配置。而PHP与MySQL连接很好。
一:软件准备:
1. PHP(PHP-5.2.11)
http://cn2.php.net/get/php-5.2.11-Win32.zip/from/a/mirror
php-5.2.11-Win32.zip
2. MySQL(5.4.2)
http://dev.mysql.com/downloads
mysql-essential-5.4.2-beta-win32.msi
3. PHPMyAdmin
phpMyAdmin-3.2.0.1-all-languages.zip
二:软件安装设置:
1. PHP安装:
php-5.2.11-Win32.zip解开压缩之后,放置到C:publicphp-5.2.11-Win32中。
1.1 DLL文件copy:
将C:publicphp-5.2.11-Win32目录下的所有dll文件copy到c:Windowssystem32下.
1.2 可执行文件和ini文件的copy:
将C:publicphp-5.2.11-Win32目录下的php.exe、php-win.exe和php.ini-dist三个文件拷到C:Windows( Windows 2000 下为C:WINNT)下;将C:Windowsphp.ini-dist改名为php.ini.
1.3. 修改PHP ini文件:
使用UltraEdit打开C:Windowsphp.ini
|
,将 Off 改成 On ;
|
,并将其路径指到你的 PHP 目录下的 extensions 目录,比如:extension_dir ="C:publicphp-5.2.11-Win32ext" ;
搜索找到
|
将下面列举的
|
可选
|
这个是用来支持GD库的,一般需要,必选
|
可选
|
这不选一般用PHPMYADMIN会出红色提示,故必选
|
这个是用来支持MSSQL的,可选
|
这个是用来支持MYSQL的,要支持MYSQL必选
将这些前的";"去掉,其他的你需要的也可以去掉前面的;然后关闭保存该文件。2.IIS配置:IIS安装很简单,但要让它支持PHP,则需要做进一步配置。PHP 支持 CGI 和 ISAPI两种安装模式,推荐使用 ISAPI 模式。这里只解介绍 ISAPI 模式安装方法:
2.1: 添加ISAPI筛选器:
在“控制面板->性能和维护->管理工具->Internet信息服务"中选择"默认网站"。停止之。
反键点选"默认网站"->属性->ISAPI筛选器,添加筛选器。
筛选器名称:":PHP"
可执行文件:"C:publicphp-5.2.11-Win32php5isapi.dll"
Sam: 这里是给IIS指出:遇到PHP,使用php指定的筛选器.
2.2: 添加应用程序映射:
反键点选"默认网站"->属性->主目录->配置,添加应用程序映射。
.php和C:publicphp-5.2.11-Win32php5isapi.dll。
Sam:这里给IIS指出:遇到.php文件,使用何种程序解析之。
2.3: 添加文档index.php
反键点选"默认网站"->属性->文档
添加一个index.php.
可以将 index.php 升到最高优先级,这样,访问站点时就会首先自动寻找并打开 index.php 文档.
2.4. 重新启动IIS:
net stop w3svc
net stop iisadmin
net start w3svc
2.5.写index.php.
首先在反键点选"默认网站"->属性->主目录下看本地路径,通常为:C:Inetpubwwwroot
则在这个目录中建立:一个index.php,内容如下:
<?php
phpinfo();
?>
此时,IIS已经支持PHP。
使用浏览器:http://localhost
则出现php info页面,且Server API的模式为:ISAPI , MySQL也为Enable.
也许使用其他电脑http://ipaddr如:http://172.16.1.46 没有显示,请察看防火墙。
3. 安装配置MySQL:
3.1 安装MySQL:
运行mysql-essential-5.4.2-beta-win32.msi。
安装在C:Program FilesMySQLMySQL Server 5.4。
3.2 配置 MySQL:
开始菜单->MySQL->MySQL Server InstanceConfig Wizar.
基本顺序Next,Sam 只修改了字符集为gb2312. root密码也修改了。
3.3: PHP与MySQL连接:
如何验证PHP是否与MySQL连接成功呢,当然是使用PHP能够读取MySQL内容了。
PHP想要读取MySQL数据库内容,则需要MySQL首先有一个数据库。
3.3.1:创建MySQL数据库:
开始菜单-> run ->cmd(因为之前安装MySQL时,已经选中了会安装到命令行,所以直接运行MySQL命令是可行的)
mysqladmin -u root -p654321 createmydb
因为之前Sam已经给root创建了密码:654321所以创建database时需要使用-p来输入密码,否则server不允许连接。
3.3.2: 给database写入内容:
在C:Program FilesMySQLMySQL Server5.4bin中创建mydb.dump文件,并写入内容如下:
CREATE TABLE employees
(
id tinyint(4) NOT NULLAUTO_INCREMENT,
first varchar(20),
last varchar(20),
address varchar(255),
position varchar(50),
PRIMARY KEY (id),
UNIQUE id (id)
);
INSERT INTO employees VALUES (1,'Bob','Smith','128 HereSt, Cityname','Marketing Manager');
INSERT INTO employees VALUES (2,'John','Roberts','45There St , Townville','Telephonist');
INSERT INTO employees VALUES (3,'Brad','Johnson','1/34Nowhere Blvd, Snowston','Doorman');
命令行进入C:Program FilesMySQLMySQL Server 5.4bin目录,运行
mysql -u root -p654321 mydb< mydb.dump
将mydb.dump内容写入mydb 这个database了。
3.3.3: PHP读取MySQL database:
程序如下:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root", "654321");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
printf("First Name: %s<br>n",mysql_result($result,0,"first"));
printf("Last Name: %s<br>n",mysql_result($result,0,"last"));
printf("Address: %s<br>n",mysql_result($result,0,"address"));
printf("Position: %s<br>n",mysql_result($result,0,"position"));
?>
</body>
</html>
将之存储为test.php.
则http://localhost/test.php
结果为:
First Name: Bob
Last Name: Smith
Address: 128 Here St, Cityname
Position: Marketing Manager
说明PHP已经可以读取MySQL数据库了。
三:PHP与MySQL进阶:
例1:
先研究一下上次PHP读取MySQL数据库的程序:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root", "654321");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
printf("First Name: %s<br>n",mysql_result($result,0,"first"));
printf("Last Name: %s<br>n",mysql_result($result,0,"last"));
printf("Address: %s<br>n",mysql_result($result,0,"address"));
printf("Position: %s<br>n",mysql_result($result,0,"position"));
?>
</body>
</html>
讲解:
$db = mysql_connect("localhost", "root", "654321");
Open a connection to a MySQL Server,
参数1:MySQL Server. (连接到本地MySQL)
参数2:用户名:root
参数3:密码:654321
连接后,
mysql_select_db("mydb",$db);
db这个连接中, 读取database --mydb(之前建立的),也叫做Activedatabase
$result = mysql_query("SELECT * FROM employees",$db);
从Active database中读取employees,resource放到result中。利用刚才得到的连接结果标识,该函数把一行SQL语句送给MySQL服务器去处理。返回的结果保存在变量$result中。
mysql_result($result,0,"first")
从resource(result)中取到first项,返回之。
参数2:表示first项目中的第几个。相当于index.因为result中放着全部的数据。
例2:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root", "654321");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
echo "<table border=1>n";
echo"<tr><td>姓名</td><td>职位</td></tr>n";
while ($myrow = mysql_fetch_row($result)) {
printf("<tr><td>%s%s</td><td>%s</td></tr>n",$myrow[1], $myrow[2], $myrow[4]);
}
echo "</table>n";
?>
</body>
</html>
讲解:
$db = mysql_connect("localhost", "root", "654321");
mysql_select_db("mydb",$db);
同上,用来连接MySQL Server.并选择Active Database.
$result = mysql_query("SELECT * FROM employees",$db);
把Active data中数据读取到result 中。
$myrow = mysql_fetch_row($result))
把result中的data读出一行来,也就是取出一个记录,放到myrow的数组中。则myrow[0],myrow[1]...依次为0-n个数据。
例3:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root", "654321");
mysql_select_db("mydb",$db);
$result = mysql_query("SELECT * FROM employees",$db);
if ($myrow = mysql_fetch_array($result)) {
echo "<tableborder=1>n";
echo"<tr><td>姓名</td><td>住址</td></tr>n";
do {
printf("<tr><td>%s%s</td><td>%s</tr>n",$myrow["first"], $myrow["last"], $myrow["address"]);
} while ($myrow =mysql_fetch_array($result));
echo "</table>n";
} else {
echo "对不起,没有找到记录!";
}
?>
</body>
</html>
与上一个程序类似。
不同点在于:
mysql_fetch_array()函数。该函数与mysql_fetch_row()十分相近,只有一点不同:使用这个函数时,我们可以通过字段名而不是数组下标来访问它返回的字段,比如$myrow["first"]。
例4:超级链接和MySQL取数据:
<html>
<body>
<?php
$db = mysql_connect("localhost", "root", "654321");
mysql_select_db("mydb",$db);
// display individual record
// 显示单条记录内容
if ($id) {
$result =mysql_query("SELECT * FROM employees WHERE id=$id",$db);
$myrow =mysql_fetch_array($result);
printf("名:%sn<br>", $myrow["first"]);
printf("姓:%sn<br>", $myrow["last"]);
printf("住址:%sn<br>", $myrow["address"]);
printf("职位:%sn<br>", $myrow["position"]);
} else {
// showemployee list
//显示员工列表
$result =mysql_query("SELECT * FROM employees",$db);
if($myrow = mysql_fetch_array($result)) {
// display list if there are records to display
// 如果有记录,则显示列表
do {
printf("<a href="%s?id=%s">%s%s</a><br>n",$PATH_INFO, $myrow["id"], $myrow["first"], $myrow["last"]);
} while ($myrow = mysql_fetch_array($result));
} else{
// no records to display
// 没有记录可显示
echo "对不起,没有找到记录!";
}
}
?>
</body>
</html>
讲解:
程序第一次进入时,id为空,则直接进入取数据打印为超级链接,其中PATH_INFO用来保存程序自身的名称与目录位置。
但如果点击超级链接,则又一次进入程序,此时id为对应ID号码,则打印此ID具体信息。