【问题标题】:bindValue / bindParam vs array performancebindValue / bindParam vs 数组性能
【发布时间】:2015-11-23 07:30:33
【问题描述】:

我总是将我的值数组传递给执行,因为它似乎更容易阅读 imo。我最近正在编写一个脚本,并注意到它正在使用 bindParam,后来发现它是如何传递变量引用的(我从来不知道)。

话虽如此,在当前的项目中,我可以想到很多 bindParam 的用法,而不是我当前的数组用法。

话虽如此,bindValue/bindParam 和在执行时使用数组之间是否有任何性能差异......尤其是在重复循环的情况下?我发现自己做了很多$stmt->execute( array_merge($binding_clause, $binding) );我有一些不会改变的绑定,当然还有一些会在循环中改变的绑定,据我所知,使用 bindParam 将是完美的。

在使用数组时添加类型(PDO::PARAM_STR, PDO::PARAM_INT)是否比不添加类型有任何性能(我相信数组默认为字符串)?

两者之间的示例差异(这些是准备好的语句):

$binding = array(
    'cw_account_id' => $_SESSION['user']['account_id'],
    'cw_date_start' => $date_start,
    'cw_date_end' => $date_end,
    'cw_start' => $b_counter * 500
);  

$stmt->execute($binding);

compared to

$stmt->bindValue(':cw_account_id', $_SESSION['user']['account_id'], PDO::PARAM_INT);
$stmt->bindValue(':cw_date_start', $date_start, PDO::PARAM_INT);
$stmt->bindValue(':cw_date_end', $date_end, PDO::PARAM_INT);
$stmt->bindValue(':cw_start', $b_counter * 500, PDO::PARAM_INT);

$stmt->execute();

除了上述问题之外,与使用数组方法相比,这里的每个$stmt->bindValue() 是否会是另一次访问数据库?

除了代码的可读性以及 bindParam 如何引用值之外,两者之间是否存在性能正面/负面(小规模和大规模使用......包括重复循环)?

【问题讨论】:

  • 与使用合适的架构/索引或异步查询的数据库查询本身相比,这甚至不值得profiling(如果您关心的话)。

标签: php pdo bindvalue bindparam


【解决方案1】:

除了代码的可读性以及 bindParam 如何引用值之外,两者之间是否存在性能上的正面/负面影响

没有。

这里的每个 $stmt->bindValue() 会不会是另一个去数据库的旅行

没有。

【讨论】:

  • 你能解释一下你的答案吗?
  • No. (参考您答案的第一个非常具有描述性的部分)-这是不正确的。两者之间存在性能负面/正面(有数组,没有数组)。它们在现代硬件上并不明显。现在,如果您尝试在从麦当劳购买的廉价 Game&Watch 式玩具上比较两者,您可能会注意到不同之处。在实用性方面:没关系。您不是在 Atari 2600 上编程并执行 12 个查询;你至少在 90 年代的桌面上工作,所以没关系。
  • practice 而言,最好使用bind 选项,因为您明确说明了这种关系;在我看来,没关系。我不想想要连续绑定 8 次,所以直接的 execute 选项是我更喜欢你的选项。使用任何你想要的。
猜你喜欢
  • 2014-07-28
  • 2011-04-13
  • 2015-06-23
  • 1970-01-01
  • 2019-05-09
  • 2013-02-15
  • 2014-08-20
  • 2013-01-03
相关资源
最近更新 更多