【问题标题】:Multiple PDO queries in a script脚本中的多个 PDO 查询
【发布时间】:2013-01-05 19:26:52
【问题描述】:

我正在尝试找出在单个脚本中使用 PDO 运行多个 SQL 查询的最佳实践。数据库连接是在脚本开始时建立的,但随后我需要进行多个不同的查询。我目前正在做的(我不确定这是最佳做法)是:

$db = new PDO('mysql:host='.$DBHOST.';dbname='.$DBNAME.';charset=UTF-8', $DBUSER, $DBPASSWORD);

$query = $db->prepare("SELECT count(*) as total from bande_ips WHERE ip=:ip");
$query->bindValue(':ip', $_SESSION['REMOTE_ADDR'], PDO::PARAM_STR);
$query->execute();
$array = $query->fetchAll(PDO::FETCH_ASSOC);

$query = NULL;
$query = $db->prepare("SELECT * from failed_login WHERE IP=:ip and email=:email");
$query->bindValue(':ip', $_SESSION['REMOTE_ADDR'], PDO::PARAM_STR);
$query->bindValue(':email', $email, PDO::PARAM_STR);
$query->execute();
$array = $query->fetchAll(PDO::FETCH_ASSOC);

如您所见,我在一个脚本中准备了两个单独的查询。但我开始设置$query = NULL;,因为脚本事先混淆了单独的查询(它期待我不再调用的旧查询的参数,这导致我不确定这是否是最佳实践。)

我只是想在继续迁移到 PDO 之前确认这是最佳做法。

【问题讨论】:

  • 我建议使用不同的变量名,因为这可能会产生误导且容易出错 - 但如果这样做,请避免使用 query1query2...
  • @tmuguet 我个人看不到这样做的好处。对我来说,这看起来像是不必要的内存使用。想解释一下原因吗?
  • 首先,变量名应该表明它的目的/内容:它查询什么?其次,正如我所说,它容易出错。示例:根据您所说,没有$query = NULL,它将失败。如果您在几个月后返回您的代码,您可能会忘记为什么$query = NULL 在那里(因为您没有评论它)并将其删除;或者如果您添加新查询,您可能会忘记添加它。如果你想进行重构,它也会给你带来麻烦。最后,如果你很担心内存消耗,你可以在完成后使用unset($query)
  • @tmuguet 实际上,如下面的答案所示,它可以在没有$query = NULL 的情况下工作,这是我的代码错误。 :)
  • @JimmyBanks 好吧,这只是一个例子。在这种情况下,重用变量可能没有明显的问题。但这并不意味着没关系;)

标签: php mysql pdo


【解决方案1】:

脚本事先混淆了单独的查询(它期待我不再调用的旧查询的参数)

这是您在其他代码中的程序流程的问题。很可能循环运行。

至于您在此处发布的代码,无需将$query 设置为NULL - 反正它会被下一行覆盖。

请注意,mysql 的有效字符集是utf8,而不是utf-8

【讨论】:

  • 是的,没错,我在导致错误的代码中遇到了问题,设置 $query = NULL 实际上并没有做任何有用的事情。
猜你喜欢
  • 2012-08-04
  • 2012-12-29
  • 2012-06-24
  • 2011-06-11
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2013-04-06
  • 2011-09-14
相关资源
最近更新 更多