我有一个自定义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");
答案 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'];
}
}