站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Xoops ORM对象关系映射1
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
===数据查询=== 上一节讲解了如何处理用户输入数据的转义,并构造查询条件通过getAll函数得到查询结果。getAll函数提供了条件组合、排序字段、排序方式、初始行数和查询行数的封装。由于查询是最常用的数据库操作,在实际应用中会有各种各样的需求,getAll函数并不能满足全面的要求,在 Frameworks库中还提供了其他几种数据查询函数。本例中将演示这些函数的使用。 注意:getAll与下面介绍的几个函数相比,具备性能高,适应范围广的优势,缺点在于传入的参数有时需要进行额外的设置。 本例的文件夹结构如下: <pre> /modules/ormrender /class /section.php /images /logo.png /sql /mysql.sql /templates /ormrender_ids.html /ormrender_index.html /ormrender_limit.html /ormrender_list.html /ids.php /index.php /limit.php /list.php /xoops_version.php </pre> 其中xoops_version.php的内容如下: <pre> /modules/ormrender/xoops_version.php <?php $modversion['name'] = "ORM对象关系映射 - 查找"; $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'] = "ormrender"; $modversion["hasMain"] = 1; $modversion["sub"][0]["name"] = "getByLimit"; $modversion["sub"][0]["url"] = "limit.php"; $modversion["sub"][1]["name"] = "getIds"; $modversion["sub"][1]["url"] = "ids.php"; $modversion["sub"][2]["name"] = "getList"; $modversion["sub"][2]["url"] = "list.php"; $modversion["sqlfile"]["mysql"] = "sql/mysql.sql"; $modversion["tables"][] = "ormrender_section"; $modversion["templates"][0]["file"] = "ormrender_index.html"; $modversion["templates"][0]["description"] = "Template for index.php"; $modversion["templates"][1]["file"] = "ormrender_limit.html"; $modversion["templates"][1]["description"] = "Template for limit.php"; $modversion["templates"][2]["file"] = "ormrender_ids.html"; $modversion["templates"][2]["description"] = "Template for ids.php"; $modversion["templates"][3]["file"] = "ormrender_list.html"; $modversion["templates"][3]["description"] = "Template for list.php"; ?> </pre> 本例的四个页面分别演示四个函数的使用方法,为便于对照学习,本例的四个函数使用同一个数据表,与上例的数据结构类似,mysql.sql的内容如下: <pre> /modules/ormrender/sql/mysql.sql CREATE TABLE `ormrender_section` ( /* 详见源代码 */ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=10 ; -- 详见源代码 </pre> 虽然本例演示四种不同的数据查询方式,但是数据对象和数据访问句柄不需要额外的编码,与上例类似,section.php文件的源代码如下: <pre> /modules/ormrender/class/section.php <?php /* 详见源代码 */ class OrmrenderSection extends ArtObject { function OrmrenderSection () { $this->ArtObject("ormrender_section"); /* 详见源代码 */ } } class OrmrenderSectionHandler extends ArtObjecthandler { function OrmrenderSectionHandler($db) { $this->ArtObjectHandler($db, "ormrender_section", "OrmrenderSection", "id", "caption"); return; } } ?> </pre> 这里使用了ArtObjectHandler函数的第五个参数$identifierName,该参数用于指定能代表对象的标识字段,与主键不同,该字段不保证唯一,但应便于阅读。 getObjects函数是ArtObjectHandler类中动态调用ArtObjectRenderHandler类的getObjects函数实现,定义如下: <pre> /Frameworks/art/object.render.php function &getObjects($criteria = null, $id_as_key = false, $as_object = true) {} </pre> 其中$criteria参数查询的条件对象,$id_as_key参数为false时,返回的数组使用序数作为键名,值为true时,使用数据的主键作为键名。在面向对象编程时,也经常会使用数据的主键作为数组的键名,此时就可以使用getObjects函数。示例页面如下: <pre> /modules/ormrender/index.php <?php require_once dirname(__FILE__)."/../../mainfile.php"; $sectionhandler = xoops_getmodulehandler("section", "ormrender"); /* @var $sectionhandler OrmrenderSectionHandler */ $xoopsOption["template_main"] = "ormrender_index.html"; include XOOPS_ROOT_PATH."/header.php"; /* @var $xoopsTpl XoopsTpl */ $allsections = $sectionhandler->getObjects(null, true); $xoopsTpl->assign_by_ref("allsections", $allsections); include XOOPS_ROOT_PATH."/footer.php"; ?> </pre> 相应的模板如下: <pre> /modules/ormrender/templates/ormrender_index.html <{strip}> <table> <tr> <th> Key </th> <!-- 详见源代码 --> <th> Caption </th> </tr> <{foreach item="sectionitem" key="key" from=$allsections}> <tr> <td> <{$key}> </td> <td> <{$allsections.$key->getVar("caption")}> </td> </tr> <{/foreach}> </table> <{/strip}> </pre> 从上面可以看出,通过getObjects函数获取以主键为键名的数组,在模板中不仅能够直接访问键名,而且还可以通过键名获取键值,而不必通过循环得到的变量。 <{$allsections.$key->getVar("caption")}> 与getAll函数相比,getObjects的效率相对低些,运行效果如图2-5 getObjects效果所示。 <div> [[Image:xop92.png]] </div> getByLimit函数是ArtObjectHandler类中动态调用ArtObjectRenderHandler类的getByLimit函数实现,定义如下: <pre> /Frameworks/art/object.render.php function &getByLimit($limit=0, $start = 0, $criteria = null, $tags = null, $asObject=true) {} </pre> 其中$limit参数限制查询结果中的行数,$start参数设置查询的起始行数。当查询结果较多时,可以直接使用getByLimit函数限制查询结果的范围,在内部getByLimi函数调用getAll函数实现,查询的结果是以主键为键名的对象数组。示例页面如下: <pre> /modules/ormrender/limit.php <?php /* 详见源代码 */ $xoopsOption["template_main"] = "ormrender_limit.html"; include XOOPS_ROOT_PATH."/header.php"; /* @var $xoopsTpl XoopsTpl */ $sections1 = $sectionhandler->getByLimit(3, 0); $xoopsTpl->assign_by_ref("sections1", $sections1); $sections2 = $sectionhandler->getByLimit(3, 3); $xoopsTpl->assign_by_ref("sections2", $sections2); $sections3 = $sectionhandler->getByLimit(3, 6); $xoopsTpl->assign_by_ref("sections3", $sections3); include XOOPS_ROOT_PATH."/footer.php"; ?> </pre> 相应的模板如下: <pre> /modules/ormrender/templates/ormrender_limit.html <{strip}> <table> <tr> <!-- 详见源代码 --> </tr> <tr> <th colspan="2"> Sections1 </th> </tr> <{foreach item="sectionitem" key="key" from=$sections1}> <!-- 详见源代码 --> <{/foreach}> <tr> <th colspan="2"> Sections2 </th> </tr> <{foreach item="sectionitem" key="key" from=$sections2}> <!-- 详见源代码 --> <{/foreach}> <tr> <th colspan="2"> Sections3 </th> </tr> <{foreach item="sectionitem" key="key" from=$sections3}> <!-- 详见源代码 --> <{/foreach}> </table> <{/strip}> </pre> 从上面可以看出,通过getByLimit函数可以限定查询范围,而且获取以主键为键名的数组,与getAll函数相比,相对方便些。运行效果如图2-6 getByLimit效果所示。 <div> [[Image:xop93.png]] </div> getIds函数是ArtObjectHandler类中动态调用ArtObjectRenderHandler类的getIds函数实现,定义如下: <pre> /Frameworks/art/object.render.php function &getIds($criteria = null) {} </pre> 其中$criteria参数是查询的条件,查询的结果是以主键为键值的数组。示例页面如下: <pre> /modules/ormrender/ids.php <?php /* 详见源代码 */ $xoopsOption["template_main"] = "ormrender_ids.html"; /* 详见源代码 */ $allsections = $sectionhandler->getIds(); /* 详见源代码 */ ?> </pre> 与index.php相比仅是函数不同。相应的模板如下: <pre> /modules/ormrender/templates/ormrender_ids.html <{strip}> <table> <tr> <th> id </th> </tr> <{foreach item="id" from=$allsections}> <tr> <td> <{$id}> </td> </tr> <{/foreach}> </table> <{/strip}> </pre> 从上面可以看出,通过getIds可以按条件仅获取主键,与getAll函数相比,getIds函数的功能相对单一。运行效果如图2-7 getIds效果所示。 <div> [[Image:xop94.png]] </div> getList函数是ArtObjectHandler类中动态调用ArtObjectRenderHandler类的getList函数实现,定义如下: <pre> /Frameworks/art/object.render.php function getList($criteria = null, $limit = 0, $start = 0) {} </pre> 其中$criteria参数是查询的条件,$limit参数限制查询结果中的行数,$start参数设置查询的起始行数,查询的结果是以主键为键名,以$identifierName对应的字段为键值的数组。示例页面如下: <pre> /modules/ormrender/list.php <?php /* 详见源代码 */ $xoopsOption["template_main"] = "ormrender_list.html"; /* 详见源代码 */ $allsections = $sectionhandler->getList(); /* 详见源代码 */ ?> </pre> 与index.php相比仅是函数不同,相应的模板如下: <pre> /modules/ormrender/templates/ormrender_list.html <{strip}> <table> <tr> <th> key </th> <th> identifier </th> </tr> <{foreach item="identifier" key="key" from=$allsections}> <tr> <td> <{$key}> </td> <td> <{$identifier}> </td> </tr> <{/foreach}> </table> <{/strip}> </pre> 从上面可以看出,通过getList可以按条件和行数范围获取主键以及指定的标识列,与getAll函数相比,getList函数的功能相对简单。运行的效果如图2-8 getList效果所示。 <div> [[Image:xop95.png]] </div>
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)