一个用于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 相关文章推荐
一个php作的文本留言本的例子(二)
Oct 09 PHP
php的header和asp中的redirect比较
Oct 09 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
PHP中几种常见的超时处理全面总结
Sep 11 PHP
关于js与php互相传值的介绍
Jun 25 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
php安装swoole扩展的方法
Mar 19 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
Jan 07 PHP
php 函数使用可变数量的参数方法
May 02 PHP
php 输出缓冲 Output Control用法实例详解
Mar 03 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
php 获取本机外网/公网IP的代码
2010/05/09 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
2020/04/13 PHP
基于jQuery的图片大小自动适应实现代码
2010/11/17 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
2013/02/02 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
jQuery表单美化插件jqTransform使用详解
2015/04/12 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
利用Node.js对文件进行重命名
2017/03/12 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
Nodejs处理异常操作示例
2018/12/25 NodeJs
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
解决Python中定时任务线程无法自动退出的问题
2019/02/18 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python hashlib加密实现代码
2019/10/17 Python
python中setuptools的作用是什么
2020/06/19 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
美国台面电器和厨具品牌:KitchenAid
2019/04/12 全球购物
库房保管员岗位职责
2014/04/07 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
公司转让协议书
2016/03/19 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
mysql如何查询连续记录
2022/05/11 MySQL