一个用于MySQL的PHP XML类


Posted in PHP onOctober 09, 2006

我承认我不是PHP的领导者。然而,在看了一些PHP的信息之后,我认为有一些功能需要添加到其中来处理数据库连接和整合XML。要做到这一点,我想我可以创建一个处理连接MySQL和使用PHP中的domxml功能来提供XML输出的类。然后我就可以在PHP脚本的任何地方声明这个类并且在需要使用它的时候可以提供XML功能。

 
我假设人们使用PHP是原因是他的标价:免费。MySQL为需要向系统中增加数据库功能的开发人员提供一个免费的数据库解决方案。这些解决方案的缺点是在设置和管理的时候有些复杂。

我在这篇文章中使用的PHP版本是PHP 4.3.4 for Win32,可以从The PHP Group下载。MySQL的版本是MySQL 4.0.16 for Win32,可以从MySQL.com得到。MySQL的安装很容易——只要简单地按照其指令来就可以了。PHP稍微有一点复杂。

在PHP的下载页面有两个文件:一个ZIP文件和一个安装文件。因为我们需要添加ZIP文件中的扩展,所以这两个文件都要下载。下面是下载之后的所要做的一个简单步骤:

1. 使用安装文件安装PHP。

2. 解压iconv.dll,将其放到Windows的系统文件夹中。

3. PHP安装目录下创建一个目录(默认为C:\PHP)“extensions”。

4. 解压php_domxml.dll文件到这个目录。

5.  在Windows文件夹下找到php.ini文件,然后使用记事本或其它文本编辑器打开。在这个文件中找到“extensions_dir=”,然后将其值修改为第3步设置的扩展文件夹的完整路径。

6. 找到“;extension=php_domxml.dll”,删除本行开头的分号。

7.重新启动Web服务器。

然后在你的Web目录下使用下面的代码创建一个PHP页面“test.php”。(这段代码在运行IIS 5.0的Windows 2000 SP3能够正常运行。)

<?php

$myxml = new CMySqlXML("localhost", "test_user", "password", "test");

echo $myxml->run_sql_return_xml("SELECT * FROM users");

classCMySqlXML {

    var $host;

    var $user;

    var $password;

    var $db;

    functionCMySqlXML($host, $user, $password, $db) {

        $this->host = $host;

        $this->user = $user;

        $this->password = $password;

        $this->db = $db;

    }

      functionrun_sql_return_xml($sql_string) {

        $connection = mysql_connect($this->host, $this->user, $this->password,

$this->db);

        mysql_select_db($this->db);

        $result = mysql_query($sql_string);

        $doc = domxml_open_mem("<root/>");

        while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {

            $num_fields = mysql_num_fields($result);

            $row_element = $doc->create_element(mysql_field_table($result, 0));

            $doc_root = $doc->document_element();

            $row_element = $doc_root->append_child($row_element);

            for ($i = 0; $i < $num_fields; $i++) {

                $field_name = mysql_field_name($result, $i);

                $col_element = $doc->create_element($field_name);

                $col_element = $row_element->append_child($col_element);

                $text_node = $doc->create_text_node($row[$field_name]);

                $col_element->append_child($text_node);

            }

        }

        mysql_free_result($result);

        mysql_close($connection);

        return $doc->dump_mem(false);

    }

  }
这个例子要求你在MySQL上有一个数据库“test”,其中有一个表“users”。而且,你还需要为访问测试数据库上的数据创建一个用户。创建数据库、表等的步骤可以查看MySQL的文档。

 
如果你分析一下代码,你就会明白我创建了一个叫做CMySqlXML的类。CMySqlXML构造函数接受四个参数:MySQL的主机名,一个合法的用户名,一个密码和一个数据库名字。构造函数使用这四个参数设置类的host、user、password和db成员变量。

该类提供的唯一的一个方法是run_sql_return_xml()。它接受一个SQL查询字符串参数。当这个方法执行的时候,它创建一个到MySQL数据库的连接并选择数据库。查询字符串被执行,结果存储到变量$result中。使用domxml_open_mem()函数创建一个新的DOMDocument对象。然后,代码开始循环结果集中的所有记录。对于每一条记录,添加一个与结果集的表同名的行元素到DOMDocument文档元素中。然后为每个字段添加一个元素到行元素中,元素名为字段名。最后,一个文本节点被添加到每个字段节点,节点的值为该字段的值。

在循环所有行之后,代码释放结果集并关闭连接。产生的DOMDocument XML从函数中返回。

在PHP页面的开始处你会看到CMySqlXML对象被实例化,run_sql_return_xml()方法被调用。这个方法的返回值被返回给客户。domxml功能除了PHP函数命名约定之外都遵守DOM规范。

如果需要更多有关DOM规范的信息,可以访问W3C的站点。而更多domxml的信息则可以从The PHP Group找到,在这里你可以下载不同格式的文档。

--------------------------------------------------------------------------------
本文作者: Phillip Perkins是Ajilon Consulting的签约人。他的经验很丰富,从机器控制和客户/服务器到企业内部网应用。

PHP 相关文章推荐
MySQL GBK→UTF-8编码转换
May 24 PHP
一段php加密解密的代码
Jul 16 PHP
用php+javascript实现二级级联菜单的制作
May 06 PHP
php的ajax框架xajax入门与试用介绍
Dec 19 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
php通过sort()函数给数组排序的方法
Mar 18 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 PHP
tp5框架内使用tp3.2分页的方法分析
May 05 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 PHP
ASP知识讲座四
Oct 09 #PHP
php.ini中文版
Oct 09 #PHP
用Apache反向代理设置对外的WWW和文件服务器
Oct 09 #PHP
Mysql的常用命令
Oct 09 #PHP
提升PHP执行速度全攻略
Oct 09 #PHP
Apache设置虚拟WEB
Oct 09 #PHP
PHP&amp;MYSQL服务器配置说明
Oct 09 #PHP
You might like
深入PHP操作MongoDB的技术总结
2013/06/02 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
2013/06/27 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
php inc文件使用的风险和注意事项
2013/11/12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
PHP格式化MYSQL返回float类型的方法
2016/03/30 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
2016/10/10 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
es6函数之尾递归用法实例分析
2020/04/25 Javascript
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
2019/03/27 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
2020/03/28 Python
CSS3实现酷炫的3D旋转透视效果
2019/11/21 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
屈臣氏马来西亚官网:Watsons马来西亚
2019/06/15 全球购物
印度尼西亚最完整和最大的在线药房网站:Farmaku.com
2019/11/23 全球购物
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
大学毕业通用个人的求职信
2013/12/08 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
部队万能检讨书
2014/02/20 职场文书
文明礼貌演讲稿
2014/05/12 职场文书
重点工程汇报材料
2014/08/27 职场文书
首次购房证明
2015/06/19 职场文书
新学期开学标语2015
2015/07/16 职场文书