【问题标题】:Fetch multiple columns while reducing SQL load在减少 SQL 负载的同时获取多列
【发布时间】:2013-10-03 04:00:29
【问题描述】:

如果这是一个微不足道的问题,我提前道歉,但我确实检查了 PHP 手册,我似乎只能找到有关获取多行的信息(我没有问题)。考虑下面的代码:

$fetch = $db->prepare("
    SELECT col1, col2
        FROM table
        WHERE col0 = '1'
");
$fetch->execute();
//SQL request made, returns 1 row, 2 columns
echo $fetch->fetchColumn(); //perfect
echo $fetch->fetchColumn(1); //doesn't work
//only one column can be fetched per SQL request

根据我对 PDO 的有限理解,我需要执行以下操作:

$fetch->execute(); //execute 1st time
echo $fetch->fetchColumn(); //perfect
$fetch->execute(); //execute 2nd time
echo $fetch->fetchColumn(1); //perfect
//or
$fetch->execute(); //execute only once
foreach($fetch as $fetcher) {} //ugly
echo $fetcher["col1"]; //perfect
echo $fetcher["col2"]; //perfect

第一种方法很慢,但第二种方法缺乏技巧。我知道我可以将逻辑放在 foreach() 循环中,但除了看起来更简洁之外,它做同样的事情,因为请求只返回一行(foreach() 只会迭代一次)。

如果只是为了提高效率,我想尽可能地减少 SQL 负载。实际的处理差异是千分之一秒。但我也希望代码简洁明了。

【问题讨论】:

  • 为什么你会认为foreach 是“丑陋的”?
  • @Passerby:我不认为循环本身很丑,只是在这个应用程序中缺乏技巧。对我来说,这相当于只为一次迭代执行for() 循环。必须有更好的执行。

标签: php sql pdo


【解决方案1】:

如果您想高效处理 SQL 流量,则只需执行并获取一次:

$fetch->execute(); //execute only once
$row = $fetch->fetch(PDO::FETCH_ASSOC);
echo $row["col1"]; //perfect
echo $row["col2"]; //perfect

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多