站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Xoops模块开发应用实例1
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
===条件对象=== XOOPS不仅能将数据库访问封装成对象,还提供将数据库的查询封装成对象。接下来本例讲解如何将查询封装成对象。 本例的文件夹结构如下: <pre> /modules/moddevcriteria /class /contact.php /images /logo.png /sql /mysql.sql /index.php /xoops_version.php </pre> 其中xoops_version.php的内容如下: <pre> /modules/moddevcriteria/xoops_version.php <?php $modversion['name'] = "模块开发 - 查询"; $modversion['version'] = 0.01; $modversion['description'] = "演示查询对象的使用"; $modversion['author'] = <<<AUTHOR 胡争辉 QQ: 443089607 QQMail: hu_zhenghui@qq.com GTalk: huzhengh GMail: huzhengh@gmail.com Skype: huzhenghui" AUTHOR; $modversion['credits'] = ""; $modversion['license'] = "版权所有"; $modversion['image'] = "images/logo.png"; $modversion['dirname'] = "moddevcriteria"; $modversion["hasMain"] = 1; $modversion["sqlfile"]["mysql"] = "sql/mysql.sql"; $modversion["tables"][] = "moddevcriteria_contact"; ?> </pre> 为便于对照学习,数据结构与上例类似。mysql.sql的内容如下: <pre> /modules/moddevcriteria/sql/mysql.sql CREATE TABLE `moddevcriteria_contact` ( /* 详见源文件 */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; INSERT INTO `moddevcriteria_contact` (`id`, `firstname`, `lastname`, `QQ`, `QQMail`, `GTalk`, `GMail`, `Skype`) VALUES (1, '争辉', '胡', '443089607', 'hu_zhenghui@qq.com', 'huzhengh', 'huzhengh@gmail.com', 'huzhenghui'); </pre> 本例中的数据访问句柄增加了对查询对象的支持,源代码如下: <pre> /modules/moddevcriteria/class/contact.php <?php class ModdevcriteriaContact extends XoopsObject { function ModdevcriteriaContact() { /* 详见源文件 */ } } class ModdevcriteriaContactHandler extends XoopsObjectHandler { function getAll ($criteria = null) { /* @var $criteria Criteria */ $ret = array(); if (true === isset($criteria)) { $sql = "SELECT * FROM ".$this->db->prefix("moddevcriteria_contact"). " ".$criteria->renderWhere(); } else { $sql = "SELECT * FROM ".$this->db->prefix("moddevcriteria_contact"); } $result = $this->db->query($sql); if (false === $result) { return $ret; } while (false !== ($row = $this->db->fetchArray($result))) { $contact = new ModdevcriteriaContact(); $contact->assignVars($row); $ret[$row["id"]] = $contact; unset($contact); } return $ret; } } ?> </pre> 本例中的getAll函数增加了一个可选的$criteria参数,该参数用于传入一个条件对象,如果未设置该参数,则和上例相同,返回全部的数据。 function getAll ($criteria = null) { 因为设置查询条件和查询全部数据会影响SQL语句,所以引用了中间变量$sql,在查询时仅查询$sql。 $result = $this->db->query($sql); 当未传入条件对象$criteria时,$sql的取值与上例相同。 $sql = "SELECT * FROM ".$this->db->prefix("moddevcriteria_contact"); 当传入了条件对象$criteria时,$sql只需要连接条件对象生成的WHERE语句即可。 <pre> $sql = "SELECT * FROM ".$this->db->prefix("moddevcriteria_contact"). " ".$criteria->renderWhere(); </pre> 可以看出,条件对象在使用时非常简单。本例的index.php页面相应的增加了查询表单,代码如下。 <pre> /modules/moddevcriteria/index.php <?php require_once dirname(__FILE__)."/../../mainfile.php"; $contacthandler = xoops_getmodulehandler("contact", "moddevcriteria"); /* @var $contacthandler ModdevcriteriaContactHandler */ include XOOPS_ROOT_PATH."/header.php"; ?> <form> first name: <input name="firstname" /> <input type="submit" /> </form> <table> <tr> <!-- 详见源文件 --> </tr> <?php if (true === isset($_GET["firstname"])) { $myts =& MyTextSanitizer::getInstance(); $criteria = new Criteria("firstname", $myts->addSlashes($_GET["firstname"])); $contacts = $contacthandler->getAll($criteria); } else { $contacts = $contacthandler->getAll(); } foreach ($contacts as $contact) { /* @var $contact ModdevcriteriaContact */ ?> <tr> <!-- 详见源文件 --> </tr> <?php } ?> </table> <?php include XOOPS_ROOT_PATH."/footer.php"; ?> </pre> 效果如图1-23查询表单所示。 <div> [[Image:xop81.jpg]] </div> 与上例不同的时,为了区别全面查询和按first name查询两种不同的情况,引入了中间变量$contacts保存查询结果。 foreach ($contacts as $contact) { 页面中依据是否设置了查询条件参数选择相应的处理过程。 if (true === isset($_GET["firstname"])) { 如果没有设置查询条件,则采用和上例相同的调用方式获取全部的数据访问对象。 $contacts = $contacthandler->getAll(); 如果设置了查询条件,则需要创建相应的条件对象,因为PHP依赖设置的不同,会对参数中的字符进行转义,因此先获取文本修饰对象。 $myts =& MyTextSanitizer::getInstance(); 然后用文本修饰对象自动对参数转义后创建条件对象。 <pre> $criteria = new Criteria("firstname", $myts->addSlashes($_GET["firstname"])); </pre> 接下来将条件对象传入getAll函数获取查询结果。 $contacts = $contacthandler->getAll($criteria); 通过上述这些修改,就实现了用条件对象查询数据,不需要在SQL语句中写WHERE子句,全部由Criteria类自动处理。 [[category:Xoops模块开发指南]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)