我想要使用要使用PHP和MySQL但是如何安装和运行呢?什么是最基本的事情我应该知道的以便让一个简单的PHP MySQL应用程序工作?
这是一个基本的教程没有怪异的代码只是一些基础
多说一句现在有大量的教程是基于UNIX机器的这个教程将集中在基于Windows平台上然而除了安装部分有或多或少的针对于Windows的说明外其它部分对所有的平台都是一样的
在这个教程中我们将一步一步地建立一个小的网站使用了PHP和MySQL的下面特性
查看数据库
编辑数据库的记录
修改数据库的记录
删除数据库的记录
我们将同时学习MySQL和PHP一起去感觉它们
第一节 收集和建立必要的项目
好开始工作为了开始PHPMySQL我们需要一些准备
运行web服务器
增加PHP扩展
运行MySQL
第一步得到和安装Web服务器
让我们假设一下在你的机器上已经有一个运行着的web服务器在Windows下有几个好用的web服务器应
用程序要注意一件事为了运行php/mysql你所选的web服务器应当可以支持扩展
一个在Windows上最容易安装的服务器是OmniHTTPd(它是一个非
常好的自由web服务器
一旦你从站点上得到了安装文件双击它并且安装web服务器如果你在安装时全部选择了使用缺省值
那么你将会把它安装在c:httpd下一旦安装成功安装程序将启动web服务器带有一个欢迎窗口在
windows的系统托盘中可以看到一个新的图标
好了第一步做完了
第二步下载和安装PHP发行版
得到PHP Win发行版很容易只要/downloadphpphp并且选择一个最好的
位置就可以了
在OmniHTTPd上安装PHP非常简单
最先Unzip安装文件到你的硬盘上比如展开在c:php
拷贝文件phpinidist到你的%WINDOWS目录下去并改名phpini(在Win/为c:windows在
WinNT/Wink为c:winnt)
按下面编辑phpini文件
改变extension_dir设置为你的PHP安装目录(c:php)或存放php_*dll的目录
选择想在PHP启动时装入的模块你应该将extension=php_*dll行的注释去掉来装入这些模块(一定
要确认去掉了extension=php_mysqldll的注释)一些模块要求有额外的库安装在你的系统上才能正常工作
PHP问答集/FAQphp)有更多关于如何得到支持库的信息你可以通过使用
dl(php_*dll)动态地装入一个模块
PHP扩展库以php_为前缀这个可以防止在PHP扩展与它们的支持库之间发生混淆
现在跟着简单的步骤配置OmniHTTPd:
在系统托盘中右击蓝色的OmniHTTPd图标选项属性(Properties)项
点击Web Server Global Settings项
点中Externaltab标签现在在Virtual域中输入php在actual域中输入c:phpphpexe
然后单击Add
选择Mime tab标签并且在Vritual中输入wwwserver/stdcgi在Actual中输入php并单
击Add
单击 OK
在同一个窗体中选择Default Virtual Settings
现在单击Server tab标签
在Default Index域中输入Indexphp(用逗号分隔)这将告诉web服务器也可以识别indexphp文件
单击 OK
好足够了让我们测试一下PHP是否在工作
创建一个名为indexphp的文本文件写入下面的文本
<?
echo I made it!;
?>
启动你的浏览器并指到localhost你应该在屏幕上得到I made it!
下面得到和安装MySQL:
去下载MySQLWin发行版将zip文件解压到一个临时目
录并且运行安装程序(setupexe)
如果你选择了缺省的典型安装所有的MySQL文件将会安装到c:mysql目录下
现在跟着以下步骤每一步都要执行正确
进行一些测试
首先你要先运行mysqldsharewareexe守护程序它位于c:mysqlbin下你可以看到一个dos窗口
并在几秒钟后关闭如果没有显示错误信息MySQLd就已经运行了
如果想检查一下MySQL只要运行c:mysqlbinmysql你将会看到有mysql>提示符的终端窗口很
好我们可以同MySQL服务器进行对话了
第二部分 创建和操纵一个MySQL数据库
首先我们需要创建要使用的数据库和表数据库起名为example表名为tbl有以下字段识别号
名姓和信息要通过mysql终端完成建库和定义表的工作只要双击或运行c:mysqlbinmysqlexe
如果要看在MySQL中已经定义了哪些表可以使用(注意mysql>是终端提示符)
Mysql> show databases; <回车>
这个命令可能显示如下信息
++
| Database |
++
| mysql |
| test |
++
rows in set ( sec)
为了定义一个新的数据库(example)键入
Mysql> create database example; <回车>
你将会看到一个回答如
Query OK row affected ( sec)
很发我们现在有了一个新数据库了现在我们可以在库中建立一个新表但首先我们需要先选中新的
数据库
Mysql> use example; <回车>
回答应该是
Database changed
现在我们可以建表了有如下字段
索引号 整数
用户名 最大长度为的字符串
用户姓 最大长度为的字符串
自由信息 最大长度为的字符串
在MySQL提示符下键入下面的命令来创建表
MySQL> create table tbl (idx integer() UserName varchar() LastName varchar() FreeText varchar());<回车>
回答应该是
Query OK rows affected ( sec)
好让我们看一下从MySQL提示符下看表是什么样子的键入命令
MySQL> show columns from tbl; <回车>
我们将得到下面的结果
+++++++
| Field | Type | Null | Key | Default | Extra |
+++++++
| idx | int() | YES | | NULL | |
| UserName | varchar() | YES | | NULL | |
| LastName | varchar() | YES | | NULL | |
| FreeText | varchar() | YES | | NULL | |
+++++++
rows in set ( sec)
在这里我们可以看到刚创建的表tbl的内容
现在让我们看一下表中有什么内容键入下面的命令
MySQL> select * from tbl;<回车>
这个命令是用来显示表tbl中的所有数据的输出可能是
Empty set ( sec)
之所以得到这个结果是因为我们还没有在表中插入任何数据让我们往表中插入一些数据键入
MySQL> insert into tbl values (RafiTonJust a test);<回车>
Query OK row affected ( sec)
如上所见我们插入到表中的值是按照前面我们定义表的顺序因为使用的是缺省的顺序我们可以设
定数据的顺序语法如下
MySQL> insert into tbl (idxUserNameLastNameFreeText) values (RafiTonJust a test);<回车>
好现在我们可以再看一下表中的内容
MySQL> select * from tbl;<回车>
这次的结果是
+++++
| idx | UserName | LastName | FreeText |
+++++
| | Rafi | Ton | Just a test |
+++++
row in set ( sec)
现在我们可以看到表的结构和每一个单元格的内容
现在我们想删除数据为了实现我们应该键入
MySQL> delete from tbl where idx= limit ;<回车> Query OK row affected ( sec)
好给出一些解释我们正在告诉MySQL从tbl表中删除记录删除那些idx字段值为的记录并且
只限制删除一条记录如果我们不限制删除记录数为那么所有idx为的记录都将被删除(在这个例子中
我们只有一条记录但是虽然如此我只是想让这一点更加清楚)
不幸的是我们又一次得到了一个空表所以让我们再输进去
MySQL> insert into tbl values (RafiTonJust a test);<回车>
Query OK row affected ( sec)
另一件可以做的事是修改指定字段的内容使用update命令
MySQL>update tbl set UserName=Berber where UserName=Rafi;<回车>
Query OK row affected ( sec)
Rows matched: Changed: Warnings:
这个命令将搜索所有UserName为Rafi的记录并将它改为Berber注意set部分和where部分不一
定要一样我们可以索搜一个字段但是改变另一个字段而且我们可以执行两个或更多条件的搜索
MySQL>update tbl set UserName=Rafi where UserName=Berber and LastName=Ton;<回车>
Query OK row affected ( sec)
这个查询搜索了两个字段改变了UserName的值
第三部分 组合PHP与MySQL
在这个部分里我们将建立一个建单的基于PHP的web站点用来控制前面所建的MySQL的表
我们将建立下面的站点结构(假设你已经知道一些基本的HTML的知识)
indexphp 用于前端查看表
addphp 用于往表中插入数据
Modifyphp 用于修改表中的记录
delphp 用于删除表中的记录
首先我们想查看一下数据库
看一下下面的脚本
Indexphp:
<html>
<head><title>Web Database Sample Index</title>
</head>
<body bgcolor=#ffffff>
<h>Data from tbl</h>
<?
mysql_connect() or die (Problem connecting to DataBase);
$query = select * from tbl;
$result = mysql_db_query(example $query);
if ($result) {
echo Found these entries in the database:<br><p></p>;
echo <table width=% align=center border=><tr>
<td align=center bgcolor=#FFFF>User Name</td>
<td align=center bgcolor=#FFFF>Last Name</td>
<td align=center bgcolor=#FFFF>Domain Name</td>
<td align=center bgcolor=#FFFF>Request Date</td>
</tr>;
while ($r = mysql_fetch_array($result))
{
$idx = $r[idx];
$user = $r[UserName];
$last = $r[LastName];
$text = $r[FreeText];
echo <tr>
<td>$idx</td>
<td>$user</td>
<td>$last</td>
<td>$text</td>
</tr>;
}
echo </table>;
}
else
{
echo No data;
}
mysql_free_result($result);
include (linksx);
?>
</body>
</html>
好下面给出一些说明
我们先用正常的html标签创建thml文档当我们想从html中出来转入PHP中时我们用<?来打开PHP部分这个告诉web服务器将后面的文本看成是PHP语法而不是一般的html使用?>来结束PHP部分
mysql_connect() 命令告诉PHP建立一个与MySQL服务器的连接如果连接建立成功脚本将继续如果
不成功则打印出die命令的信息Problem connecting to Database(如果要看关于mysql_connect的更
多的信息和其它的PHP函数可以下的文档中查找)
现在如果MySQL是按照我们上面所讨论的那样安装的就足够了但是如果你使用的是预装的MySQL(象ISP)你应该使用下面的命令
mysql_connect (localhost username password);
我们可以将$query设成我们想在MySQL中执行的查询然后使用mysql_db_query命令来执行它
$result = mysql_db_query(example $query);
这时example表示数据库的名字并且$query是要进行的查询
我们使用MySQL命令select(象上面所描述的)来从表中取得所有的数据
$query = select * from tbl;
简单地解释一下$result的作用如果执行成功函数将返回一个查询结果的一个MySQL结果标识符如
果出错则返回false返回的不是结果而是一个标识符可以在后面将它转换成我们所需的信息
现在我们想检查一下在数据库中是否存在有记录并且如果有则将结果按照html的表格结构打印出来
为了检查是否存在数据我们使用if命令和下面的语法
if (argument) {
do something;
} else {
do something different;
}
这时do something当argument=true时你所要执行的命令do something different为当argument =
false时所要执行的命令
注意我们使用echo命令来输出一些html标签来建立html的表格结构只有从PHP命令输出的文本才会被
看成html内容 PHP命令本身是不会看成html内容的
我们使用的另一个命令是while指令使用格式如下
while (argument)) {
something to do;
}
while循环在argument=true时会不停地重复执行在{}中的指令集
这里我们组合了while循环和PHP函数$r=mysql_fetch_array($result)这个函数根据相应的结果标识
符取回一条记录并且将结果放在一个相关数组(associative array)$r中它使用字段的名字作为数组的
键值在我们的脚本中我们将得到一个数组$r[idx]$r[UserName]$r[LastName]和
$r[FreeText]
我们也可以使用mysql_fetch_row函数它会将结果放在一个有序的数组中我们可以使用$r[]$r[]
$r[]和$r[]来得到相应的值
要了解关于这些函数的更深入的信息请访
现在我们有了所有的信息我们可以把它在html表格中打印出来
echo <tr>
<td>$idx</td>
<td>$user</td>
<td>$last</td>
<td>$text</td>
</tr>;
现在我们可以释放MySQL连接并且释放一些资源通过使用mysql_free_result($result)函数
PHP另一个有用的特性是在脚本中包括文本文件的功能让我们假设你有一些可重用的代码(例如到其
它页面的链接)我们可以使用include函数这样可以节省一些代码和时间而且如果想改变这些代码
我们只需要改变包含文件的内容它将会在所有包括它的文件中生效
这里我们创建一个名为Linksx的文本文件它将存放我们想用在每一个页面中的全部链接菜单
<p></p>
<ul>
<li><a >Home</a>
<li><a >Add a new entry to the DataBase</a>
<li><a >Edit an entry</a>
<li><a >Delete an entry from the DataBase</a>
</ul>
include的语法是
Include (included_text_file);
现在我们可以用?>来关闭PHP部分并且用</body></html>来结束html页面
使用表单增加数据
让我们看一下下面的代码
<html>
<head><title>Add an entry to the database</title>
</head>
<body bgcolor=#ffffff>
<h>Add an entry</h>
<form method=post action=addtblphp>
<table width=% align=center>
<tr><td>Index:</td><td><input type=text name=idx size= maxlength=></td></tr>
<tr><td>UserName:</td><td><input type=text name=UserName size=
maxlength=></td></tr>
<tr><td>LastName:</td><td><input type=text name=LastName size=
maxlength=></td></tr>
<tr><td>FreeText:</td><td><input type=text name=FreeText s= maxlength=></td></tr>
<tr><td></td><td><input type=submit value=add></td></tr>
</form>
</table>
<?php include (linksx);?>
</body>
</html>
假设你对表单很熟悉这是一个相当简单的脚本我们根据html页面设计了一个表单它在提交后调用
addtblphp脚本现在表单与MySQL表相对应由个字段组成index numberFirstNameLastName和
FreeText注意在这个表单中字段名字与MySQL表中字段名一样但这只是为了方便起见而不是必须
我们再一次使用了include命令<? include (linksx);?>(象在前面所解释的)来增加链接
让我们看一下addtblphp脚本
<html>
<body>
<?
if ($UserName)
{
mysql_connect() or die (Problem connecting to DataBase);
$query = insert into tbl values ($idx$UserName$LastName$FreeText);
$result = mysql_db_query(example $query);
echo Data inserted new table:<br><p></p>;
$query = SELECT * FROM tbl;
$result = mysql_db_query(example $query);
if ($result)
{
echo <table width=% align=center border=><tr>
<td align=center bgcolor=#FFFF>idx</td>
<td align=center bgcolor=#FFFF>User Name</td>
<td align=center bgcolor=#FFFF>Last Name</td>
<td align=center bgcolor=#FFFF>Free Text</td>
</tr>;
while ($r = mysql_fetch_array($result))
{
$idx = $r[idx];
$user = $r[UserName];
$last = $r[LastName];
$free = $r[FreeText];
echo <tr>
<td>$idx</td>
<td>$user</td>
<td>$last</td>
<td>$free</td>
</tr>;
} // while循环结束
echo </table>;
}
else
{
echo No data;
} // if结束($result)
}
else
{
echo No UserName Entered Please go back and reenter UserName;
} // if结束($UserName)
echo <p></p>;
include (linksx);
?>
</body>
</html>
解释
这一部分包含两个主要部分第一部分从前一个表单中得到数据并将它们插入到数据库中第二部分
从数据库中打印出表的内容第二部分同我在查看数据库部分中所演示的一样
第一部分
首先我们象通常一样使用mysql_connect()来同数据库连接
然后我们使用下面查询
$query = insert into tbl values ($idx$$LastName$FreeText);
这个查询使用从前面表单传递过来的$idx$UserName$LastName和$FreeTExt变量并将它们插入到
tbl表中
注意我在脚本中所作的注释使用一个注释可以用//服务器将忽略此行的后面部分
简单不是吗?
从数据库中编辑一条记录
让我们假设一下我们想修改数据库中存在的记录在前面我们看到有一个叫set的SQL命令用来设置
数据库中存在字段的值我们将使用这个命令来修改数据库中的整条记录
考虑下面的脚本
editphp:
<html>
<head><title>Editing an entry from the database</title>
</head>
<body bgcolor=#ffffff>
<h>Edit an entry</h
<?
mysql_connect() or die (Problem connecting to DataBase);
$query = select * from tbl;
$result = mysql_db_query(example $query);
if ($result)
{
echo Found these entries in the database:<br>;
echo <table width=% align=center border=><tr>
<td align=center bgcolor=#ffff>idx</td>
<td align=center bgcolor=#FFFF>User Name</td>
<td align=center bgcolor=#FFFF>Last Name</td>
<td align=center bgcolor=#FFFF>Free Text</td>
</tr>;
while ($r = mysql_fetch_array($result))
{
$idx = $r[idx];
$user = $r[UserName];
$last = $r[LastName];
$text = $r[FreeText];
echo <tr>
<td align=center>
<a editingphp?idx=$idx&user=$user&last=$last&text=$text>$idx</a></td>
<td>$user</td>
<td>$last</td>
<td>$text</td>
</tr>;
}
echo </table>;
}
else
{
echo No data;
}
mysql_free_result($result);
include (linksx);
?>
</body>
</html>
如你所见这里的代码有些熟悉第一部分只是打印出数据库中表的内容注意有一行不太一样
<a editingphp?idx=$idx&user=$user&last=$last&text=$text>$idx</a>
这一行建立了一个到editingphp的一个链接并且给新的脚本传递了一些变量同表单方式很象只
是使用的是链接我们将信息转换成变量和值注意为了打印出 符号我们需要使用 否则服务器
将把它看成PHP脚本的一部分并且作为被打印的信息
我们想将数据库中的记录全部转换到过这样我们就可以得到表中的确切的数据以便我们修改它容易
一些
Editingphp:
<html>
<head><title>Editing an entry</title>
</head>
<body bgcolor=#ffffff>
<h>Editing an entry</h>
<form method=post action=editdbphp>
<table width=% align=center>
<tr><td>idx:</td><td><?php echo $idx;?></td></tr>
<tr><td>UserName:</td><td><input type=text name=UserName size= maxlength=
value=<?php echo $user;?>></td></tr>
<tr><td>LastName:</td><td><input type=text name=LastName size= maxlength=
value=<?php echo $last;?>></td></tr>
<tr><td>Free Text:</td><td><input type=text name=FreeText size= maxlength=
value=<?php echo $text;?>></td></tr>
<tr><td></td><td><input type=submit value=Edit it!></td></tr></table>
<input type=hidden name=idx value=<?php echo $idx;?>>
</form>
<?php include (linksx);?>
</body>
</html>
好这个脚本很简单我们要关心的是当表单打印出来时它记录了当前记录的数据通过在 <input
type= > 命令中的value属性这些数据是从前一个页面传递过来的
现在如果我们不改变记录的信息它将传回当前值即缺省值如果我们改变了字段的值字段的值
将变成新的值接着我们可以将新值传给另一个脚本它将会改变MySQL表中的值
editdbphp:
<?php
mysql_connect() or die (Problem connecting to DataBase);
$query = update tbl set
idx=$idxUserName=$UserNameLastName=$LastNameFreeText=$FreeText where
idx=$idx;
$result = mysql_db_query(example $query);
$query = SELECT * FROM tbl;
$result = mysql_db_query(example $query);
if ($result)
{
echo Found these entries in the database:<br><p></p>;
echo <table width=% align=center border=><tr>
<td align=center bgcolor=#FFFF>idx</td>
<td align=center bgcolor=#FFFF>User Name</td>
<td align=center bgcolor=#FFFF>Last Name</td>
<td align=center bgcolor=#FFFF>Free Text</td>
</tr>;
while ($r = mysql_fetch_array($result))
{
$idx = $r[idx];
$user = $r[UserName];
$last = $r[LastName];
$text = $r[FreeText];
echo <tr>
<td>$idx</td>
<td>$user</td>
<td>$last</td>
<td>$text</td>
</tr>;
}
echo </table>;
}
else
{
echo No data;
}
mysql_free_result($result);
include (linksx);
?>
基本上要关心的一件事情是下面一行
$query = update tbl set idx=$idxUserName=$UserNameLastName=$LastNameFreeText=$FreeText where idx=$idx;
注意它与我们在前面MySQL部分解释的语法相同另一件事注意这个脚本改变的是idx=$idx的记录
如果表中有多条idx等于$idx的记录所以这些记录都将被改变如果我们想更严格一些我们可以象下面
改动一下where子句
$query = update tbl set idx=$idxUserName=$UserName LastName=$LastNameFreeText=$FreeText where idx=$idx and UserName=$UserName and LastName=$LastName and FreeText=$FreeText;
这个语法将检查所有的字段而不仅仅是检查idx
从数据库中删除一条记录
好删除很容易我们仍然需要两个脚本一个用来选择要删除的记录(基本上同上面选择要编辑的记
录一样)一个用来真正地进行删除和打印新的表格
delphp:
<html>
<head><title>Deleting an entry from the database</title>
</head>
<body bgcolor=#ffffff>
<h>Del an entry</h>
<?
mysql_connect() or die (Problem connecting to DataBase);
$query = select * from tbl;
$result = mysql_db_query(example $query);
if ($result)
{
echo Found these entries in the database:<br><p></p>;
echo <table width=% align=center border=><tr>
<td align=center bgcolor=#ffff>idx</td>
<td align=center bgcolor=#FFFF>User Name</td>
<td align=center bgcolor=#FFFF>Last Name</td>
<td align=center bgcolor=#FFFF>Free Text</td>
</tr>;
while ($r = mysql_fetch_array($result))
{
$idx = $r[idx];
$user = $r[UserName];
$last = $r[LastName];
$text = $r[FreeText];
echo <tr>
<td align=center>
<a delephp?
idx=$idx&UserName=$user&LastName=$last&FreeText=$text>$idx</a></td>
<td>$user</td>
<td>$last</td>
<td>$dtext</td>
</tr>;
}
echo </table>;
}
else
{
echo No data;
}
mysql_free_result($result);
include (linksx);
?>
</body>
</html>
这个脚本与我们用过的编辑脚本很象所以可以看一下那里的说明
delephp:
<?php
mysql_connect() or die (Problem connecting to DataBase);
$query = delete from tbl where idx=$idx and UserName=$UserName and
LastName=$LastName and FreeText=$FreeText;
$result = mysql_db_query(example $query);
$query = SELECT * FROM tbl;
$result = mysql_db_query(example $query);
if ($result)
{
echo Found these entries in the database:<br><p></p>;
echo <table width=% align=center border=><tr>
<td align=center bgcolor=#FFFF>idx</td>
<td align=center bgcolor=#FFFF>User Name</td>
<td align=center bgcolor=#FFFF>Last Name</td>
<td align=center bgcolor=#FFFF>Free Text</td>
</tr>;
while ($r = mysql_fetch_array($result))
{
$idx = $r[idx];
$user = $r[UserName];
$last = $r[LastName];
$text = $r[FreeText];
echo <tr>
<td>$idx</td>
<td>$user</td>
<td>$last</td>
<td>$text</td>
</tr>;
}
echo </table>;
}
else
{
echo No data;
}
mysql_free_result($result);
include (linksx);
?>
这个脚本看上去很熟悉唯一不同的就是删除查询的语法
$query = delete from tbl where idx=$idx and UserName=$UserName and LastName=$LastName and FreeText=$FreeText;
这个查询将会删除所有与前面的脚本传递来的信息相配匹的记录容易吧
好了这就是全部内容了