没有合适的资源?快使用搜索试试~ 我知道了~
MySQL数据库详细介绍pdf(8)
需积分: 0 4 下载量 44 浏览量
2009-02-22
19:55:06
上传
评论
收藏 1.53MB PDF 举报
温馨提示
试读
29页
MySQL数据库详细介绍pdf(8) MySQL数据库详细介绍pdf(8)
资源详情
资源评论
资源推荐
下载
第8章 PHP API
PHP 是一种脚本语言,可以编写包含嵌入式代码的 Web 页面,只要访问页面就能执行这
些代码,并且这些代码还能生成动态的内容作为输出的一部分发送到客户机的 Web 浏览器。
本章描述了如何用 P H P 编写使用M y S Q L 的基于We b 的应用程序。有关 C 与 PHP 和 Perl DBI
API 的比较,请参阅第5章“MySQL 程序设计介绍”。
本章的实例利用了样例数据库 s a m p _ d b ,这个实例使用了为学分保存方案而创建的表和
第1章“MySQL 和 SQL 介绍”中为历史同盟而创建的表。虽然在写本书时 PHP 4还处于ß测
试阶段,而当您读到本书时它可能已经发布了,但这里还是要涉及 PHP 3的内容。与P H P 3 兼
容是 PHP 4 的一个明确设计目标,因此这里所说的有关 PHP 3的各个方面都可应用到 P H P 4 中。
从 PHP 3 更改到 PHP 4 有一组移植注意事项。如果使用 PHP 4,就应该阅读那些注释。
本章假设的环境是:PHP 与 Apache Server结合使用。必须安装 MySQL C 客户机库和头
文件,因为建立 PHP 时需要这些文件,否则 PHP 不知道如何访问 MySQL 数据库。如果需要
获得一些这样的软件,请参阅附录 A“获得和安装软件”。附录中还给出了获得本章开发的实
例脚本的说明,您可以直接下载这些脚本。
在 UNIX 环境下,PHP 或者作为内建模块用于 A p a c h e,该模块连接到 Apache 可执行的
二进制程序上;或者作为独立的用于传统 CGI 程序的解释程序。在 Windows 环境下,虽然开
发在Windows NT 环境下运行的 Apache PHP 4 模块的工作正在进行之中,但是此刻的 P H P 只
能作为一个独立程序来运行。
本章的大部分篇幅,都用来说明了在这里讨论所需要的 PHP 函数。要想较全面地了解所
有关于 MySQL 的函数,请参阅附录 H“PHP API 参考”,也可以查阅 PHP 手册,它描述了
PHP 提供的全部函数,包括使用除 MySQL 以外的数据库的函数(使用 M y S Q L 时,PHP 不受
限制的部分仅仅只有 D B I )。这个手册可以从 PHP Web 站点下载:h t t p : / / w w w. p h p . n e t / 。该
Web 站点也有从 PHP 3移植到 PHP 4的注意事项。
8.1 PHP 脚本的特点
PHP 脚本的文件名带有扩展名,该扩展名允许 Web 服务器识别文件名并执行 PHP 解释
程序去处理它们。如果使用了不可识别的扩展名,则 PHP 脚本被当作纯文本。本章使用的扩
展名为 . p h p ,其他通用的扩展名为 .php3 和 . p h t m l 。有关配置 Apache 来识别扩展名的说明,
请参阅附录A。在机器上,如果没有掌握 Apache 的安装,那么需要与系统管理员一起检查,
找出可使用的适当扩展名。
8.2 PHP基础
PHP 的基本功能就是解释一个脚本,来生成发送到客户机的 Web 页面。具有代表性的
是,脚本包括逐字发送到客户机的 HTML 和作为程序执行的 PHP 代码的混合编码。无论
代码生成什么样的输出,都会发送到客户机,因此客户机永远不会看到代码,它只能看到
结果的输出。
当 PHP 开始读取文件时,假设文件内容表示文字的 H T M L ,则它仅仅拷贝在那里找到的
输出内容。当 PHP 解释程序遇到一个特殊的打开标记时,就从 HTML 模式切换到 PHP 代码
模式,而作为要执行的 PHP 代码也开始解释文件。代码的结尾由另一个特殊的标记指出,解
释程序在这个位置从代码模式切换回 HTML 模式。这就允许将静态的文本( HTML 部分)与
动态产生的结果( PHP 代码部分的输出)相混合,产生依赖于调用环境变化的页面。例如,
可以使用 PHP 脚本来处理表格的结果,在这个格式中,用户已经输入了数据库搜索的参数。
由于格式填入内容的不同,所以每次搜索的参数可能也不同,因此当脚本执行搜索的时候,
每个作为结果的页面将反映不同的搜索。
让我们通过一个非常简单的 PHP 脚本看一看它是如何工作的:
这个脚本并不很有趣,因为它不包括 PHP 代码!因此您会问:那它有什么好处?这个问
题的回答是:它有时有助于建立包括想要生成页面的 HTML 框架的脚本,然后再加入 P H P
代码。这是非常有效的,PHP 解释程序用于它是没有问题的。
为了在脚本中包括 PHP 代码,您可从用两个特殊标记(脚本开始处的‘ < ? p h p ’和脚本
结束处的‘? > ’)把它与周围的文本区分开来。当 PHP 解释程序遇到开始的‘< ? p h p’标记时,
就从 HTML 模式切换到 PHP 模式,并解释它找到的任何 PHP 代码,直到看见结束的‘ ? > ’
标记为止。它产生的所有输出解释并替换了两个标记之间的脚本。将前面的实例再重新编写
一下,它包括了少量的 PHP 代码,如下所示:
此时,代码部分是很小的,由单行组成。当解释代码时,产生了输出“ hello, world”,它
作为输出部分发送到客户机浏览器。这样,这个脚本产生的 Web 页面与前面实例产生的 We b
页面一样,前面实例的脚本完全由 HTML 组成。
可以使用 PHP 代码产生 Web 页面的任何部分。我们已经看到了一个特别的实例,在那里
整个脚本都由文字的 HTML 组成,而不包括 PHP 代码。另一个特别的实例是整个脚本都是
PHP 代码而不包括文字的 H T M L:
这说明 PHP 在如何产生输出方面有很大的灵活性。但 PHP 也留下一个问题,那就是确定
如何组合 HTML 和 PHP 代码才是合适的。不必把所有代码都放在一个地方, PHP 在这方面
也很灵活。只要您高兴,就可以通过脚本在 HTML 和 PHP 代码模式之间进行转换。
第8章 PHP API计计249
下载
PHP 脚本标记
除了本章实例中使用的标记之外, P H P 还支持其他的脚本标记。您可以在其他人编写
的 PHP 代码中看到它们,或者可以自己使用这些标记。 PHP 识别四种标记风格:
■ 缺省标记风格。这是PHP 配置为缺省时使用的风格:
■ 简洁开标记风格。这个风格除了开标记较简洁外,其他与缺省风格相类似:
■ 兼容 ASP 的风格。这个风格在 Active Server Page 环境内部是通用的:
■ <SCRIPT> 标记风格。如果使用与其他标记风格不同的 HTML 编辑器,这个风格是有
用的。当然,它比较冗长,但是当您使用其他标记风格时,编辑器可能不处理 PHP 代
码,这时您将发现它是必需的:
缺省时,简洁开标记风格和兼容 ASP 风格无效。请参阅附录 H 有关开启它们的说明。
独立的 PHP 脚本
当处理命令解释程序脚本或 Perl 脚本时,可以编写从命令行调用的独立的 PHP 脚本。
这里有一个实例:
前面的脚本可命名为 h e l l o . p h p ,利用 chmod +x 使之成为可执行的,并从命令解释程
序中调用:
本章中我们不编写任何独立的脚本。这里编写的所有实例都期望 Web 服务器调用它
们来生成 Web 页面。
下一个脚本有一些实质性的内容,但仍然相当简短。它说明了如何较容易地从 PHP 访问
MySQL 数据库,并在 Web 页面中使用查询结果。此脚本在第 5 章表达得很简短,它形成了
历史同盟 Web 站点主页的基础。在我们继续往下做的时候,应该使脚本更精巧一些,但直到
现在为止,它所做的只是显示简短的欢迎消息和当前同盟会员资格的计数:
250计计第二部分 MySQL 编程接口
下载
欢迎消息就是一个静态文本,因此它作为文字的 HTML 是最容易编写的。另一方面,会
员资格的计算是动态的,而且随时会更改,因此必须在它不工作时通过查询 samp_db 数据库
中的 member 表来确定。
在开和闭脚本标记之间的代码文本执行一个简单的任务。首先,它打开了与 MySQL 服
务器的连接,并使 samp_db 数据库成为缺省数据库。然后,它发送一个到服务器的查询来确
定此刻历史同盟有多少成员(我们将它作为 member 表中的行数)。查询结果将作为包括会员
资格计数消息的一部分显示出来,然后再做处理。
在处理过程中,如果任何一点发生错误,该脚本都会简单地退出。它由于太简单而不产
生错误输出,因此把访问该 Web 站点的人们搞糊涂了(如果依靠 PHP 代码生成整个 Web 页
面,当因错误而退出,且不产生任何输出时,可能会使访问页面的人非常恼火,因为有些浏
览器将显示“这个页面没有数据”的对话框)。
让我们把该脚本分成几段,看看它是如何工作的。第一步是用 mysql_pconnect() 连接到
服务器:
mysql_pconnect() 把主机名、用户名和口令作为参数。连接建立成功,则返回连接标识符,
如果发生错误,则返回 FA L S E 。如果连接失败,脚本立刻调用 exit() 来结束脚本,并且不再
产生输出。
在 mysql_pconnect() 调用前的‘@’字符是什么意思呢?就是“请关闭”的意思。有些
PHP 函数在失败时除了返回状态代码之外还写出错误消息。在 mysql_pconnect() 情况下,失
败的连接导致了下面的消息出现在发送到客户机浏览器的 Web 页面上:
这样很难看,参观我们站点的人们可能不知道它是如何造成的和该怎样处理它。把‘ @’
字符放到 mysql_pconnect() 调用的前面,就可以取消这个错误消息,以使我们能在返回值的
基础上自己选择如何处理错误。对于该脚本,如果发生错误,最好根本不产生属于会员资格
计数的输出。这样,页面将只包含欢迎消息。
任何 PHP 函数都可以使用‘@’,但以笔者的经验来说,初始的 mysql_pconnect() 调用是
最可能失败的一个。因此,本章的例子禁止来自该函数中的消息。
将名称和口令嵌入到所有人都能看到的脚本中,可能会使您紧张不安。是这样的,名称
和口令出现在发送到客户机的 Web 页面上是对的,因为该脚本的内容由其输出的结果替换掉
了。然而,如果 Web 服务器不知何故配置不当,没有识别出脚本需要由 PHP 代码来处理,
它就会将脚本以纯文本发送出去,且会暴露连接参数。在 8 . 2 . 1 节“使用函数和 include 文件”
中,将简要地处理这类情况。
mysql_pconnect() 返回的连接标识符可以传递到 PHP API 中的几个与 MySQL 相关的调
用中。然而,对于这样的调用,标识符总是可选择的。例如,可以使用下列格式之一来调用
m y s q l _ s e l e c t _ d b ( ) :
第8章 PHP API计计251
下载
mysql_pconnect() 与 mysql_connect() 的对比
函数 mysql_pconnect() 与函数 mysql_connect() 相似,都具有主机名、用户名和口令
参数,并返回连接标识符或 FALSE 来说明连接是否成功。两个调用之间的不同在于:
mysql_pconnect() 建立了一个持久的连接,而 mysql_connect() 建立了一个非持久的连接。
与非持久连接不同,持久连接在脚本终止时不关闭。如果另外一个 PHP 脚本随后由同一
个 Apache 子处理执行,并用同样的参数调用 m y s q l _ p c o n n e c t ( ),将重新使用这个连接。
这比关闭后再建立连接的效率要高。
如果忽略了从一些相关 MySQL 的 PHP 调用中得到的连接参数,调用就会使用最近打开
的连接。这样,如果脚本只打开单个连接,那么在任何 MySQL 调用中永远不必指定连接参
数——即连接是缺省的。这就是 C 或 DBI API 与 MySQL 程序设计的极大不同之处,因为它
们没有这样的缺省。
笔者使用 $link 变量在简单的主页上编写了下面的连接代码,使 mysql_pconnect() 返回哪
种类型的值更加清晰:
然而,实际上,我们在脚本的其他地方都没有使用 $ l i n k ,因此代码可更简单地写成:
假设连接建立成功,则下一步是选择一个数据库:
如果 mysql_select_db 失败,我们将会默默地退出。如果我们能够连接到服务器,并且数
据库存在,那么似乎不可能发生错误,但是仍然要严格地检查问题并采取相应的行动。选择
数据库之后,可将查询发送到服务器,提取结果,加以显示,然后释放结果集:
mysql_query() 函数将查询发送到服务器中去执行。查询不用分号或者‘ \ g ’终止。如果
查询非法或因为某些原因不能执行,则 mysql_query() 返回 FA L S E,否则返回一个结果集标识
符。该标识符是我们能用来获得有关结果集信息的值。对于查询,该结果集由表示会员资格
计数的单列值的单行组成。为得到这个值,我们可以把结果集标识符传给 m y s q l _ f e t c h _ r o w ( )
来获取行,将此行赋给变量 $ r o w ,并以 $row[0] 形式访问第一个元素(只有一个元素时也是
这样)。
当处理完结果集时,将结果集传递给 mysql_free_result() 进行释放。实际上这种调用在我
们的脚本中是不必要的,因为当脚本结束时, PHP 会自动地释放所有活动的结果集。
mysql_free_result() 有助于执行大型查询或大量查询的脚本。它防止大量内存的使用。
为了使用脚本,需要在某处安装它。本章将采用这样的约定:美国历史同盟在 Apache 文
档树的最高一级中有自己的目录,称为 u s h l,因此主页面脚本作为该树的 ushl/index.php 进行
252计计第二部分 MySQL 编程接口
下载
剩余28页未读,继续阅读
vastskyjoe
- 粉丝: 33
- 资源: 123
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0