首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对数据库进行更少的调用并将结果输出到数组中是最好的吗?

对数据库进行更少的调用并将结果输出到数组中是最好的吗?
EN

Stack Overflow用户
提问于 2010-06-15 00:33:38
回答 4查看 165关注 0票数 0

我正在尝试创建一种更简洁的方式来调用数百个数据库。我没有在每次想要输出单个字段时编写整个查询,而是尝试将代码移植到一个执行所有查询工作的类中。这是我到目前为止所学到的类:

代码语言:javascript
复制
class Listing {

/* Connect to the database */
private $mysql;

function __construct() {
    $this->mysql = new mysqli(DB_LOC, DB_USER, DB_PASS, DB) or die('Could not connect');
}
function getListingInfo($l_id = "", $category = "", $subcategory = "", $username = "", $status = "active") {
    $condition = "`status` = '$status'";
    if (!empty($l_id)) $condition .= "AND `L_ID` = '$l_id'";
    if (!empty($category)) $condition .= "AND `category` = '$category'";
    if (!empty($subcategory)) $condition .= "AND `subcategory` = '$subcategory'";
    if (!empty($username)) $condition .= "AND `username` = '$username'";
    $result = $this->mysql->query("SELECT * FROM listing WHERE $condition") or die('Error fetching values');
    $info = $result->fetch_object() or die('Could not create object');
    return $info;
}
}

这使得从单行中访问我想要的任何信息变得很容易。

代码语言:javascript
复制
$listing = new Listing;
echo $listing->getListingInfo('','Books')->title;

这将输出"Books“类别中第一个列表的标题。但是,如果我想输出该清单的价格,我必须再次调用getListingInfo()。这将在数据库上进行另一次查询,并再次仅返回第一行。

这比每次编写整个查询要简洁得多,但我觉得我可能调用db的频率太高了。有没有更好的方法从我的类中输出数据,同时仍然简洁地访问它(也许将所有行输出到一个数组并返回该数组)?如果是,是如何实现的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-15 00:42:11

您应该能够将查询中的整个对象存储到一个变量中,然后从该对象中访问单个值:

代码语言:javascript
复制
$object = $listing->getListingInfo('','Books');
$title = $object->title;
$price= $object->price;

但您也可以使用fetch_assoc()并返回整个组合数组:

代码语言:javascript
复制
$array = $listing->getListingInfo('','Books');
$title = $object['title'];
$price= $object['price'];

这将为您提供相同的结果,而且只需对DB进行一次查询。

编辑:如果getListingInfo()是唯一的函数,您应该考虑以下几点:

  1. 将该函数重命名为prepareListingInfo(),并且在该函数中仅准备查询并将其存储在类变量中。
  2. 添加了getNextListingInfo()函数,该函数将返回下一行的对象或关联数组。

使用这个新函数,您可以获取与查询匹配的每一行。

票数 0
EN

Stack Overflow用户

发布于 2010-06-15 00:44:52

你真的有性能问题吗?

如果您当前的设置工作正常,并且没有性能问题,我不会去碰它。

这种类型的数据库访问抽象可能会成为维护问题,可能不会对性能有所帮助。

而且,你对很敏感。

票数 7
EN

Stack Overflow用户

发布于 2010-06-15 00:38:58

将结果缓存到内部变量中

或者使用警告注释它,并向函数用户解释将结果复制到var中,而不是使用相同的参数一次又一次地调用它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3039005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档