从数据库接收变量的最佳方法

时间:2014-04-22 09:32:47

标签: php mysql sql wordpress

我有一个自定义Wordpress表,其中包含以下内容:

account_info
id   | account_id | wp_title | wp_url
1    | 12345      | website  | website.com

获得结果的最佳(或最快)方式是什么?

选项1:

global $wpdb;   

$sql = "SELECT id, wp_title. wp_name FROM account_info";
$results = $wpdb->get_results($sql);

if(!empty($results)) { 
    foreach($results as $r) {   
         $id = $r->id;
         $wp_title = $r->wp_title;
         $wp_name = $r->wp_name;

    }
} 

选项2:

$id = $wpdb->get_var("SELECT id FROM account_info");
$wp_title = $wpdb->get_var("SELECT wp_title FROM account_info");
$wp_name = $wpdb->get_var("SELECT wp_name FROM account_info");

3 个答案:

答案 0 :(得分:1)

当你谈论“最好”和“最快”时 - 这些并不是你需要考虑的唯一事情。 可读性也是未来开发人员查看代码的关键。

选项一清楚地表明,如果结果集不为空,则循环它们并设置一些变量。选项二是框架特定的,这并不总是最好的方法。

在微优化之前,确保可读性处于最佳状态 - 永远不要为另一个牺牲一个。

速度方面,只需确保正确索引数据库。您正在使用PHP可用的最快循环。另外,选项二是进行多个数据库查询。总是尝试将多个查询合并为一个 - 您不需要额外调用您实际上不需要的数据库。

您希望避免使用global关键字。这是不好的做法,使你的代码不可测试。以另一种方式访问​​$wpdb变量,方法是将其传递给函数或在其他地方包含文件。请参阅why global variables are bad并在google上搜索一下。

答案 1 :(得分:0)

这取决于您的目标,查询语言和索引等的元数据设计。

在上面的示例中,如果有多个选项可用,则将结果作为上述对象收集并迭代将是最佳选择。

如果只是期望单个结果在您的查询中是安全的广告LIMIT 1并相应地访问您的对象属性

答案 2 :(得分:0)

恕我直言,我推荐选项1,但更好的是我推荐使用许多作者建议的预备语句。它避免滥用协议并最大限度地减少数据传输。

$stmt = $dbh->prepare("SELECT id, wp_title. wp_name FROM account_info");
if ($stmt->execute(array())) {
  while ($row = $stmt->fetch()) {
     $id = $row['id'];
     $wp_title = $row['wp_title'];
     $wp_name = $row['wp_name']; 
  }
}