首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在两个查询之间共享connection_id?

如何在两个查询之间共享connection_id?
EN

Stack Overflow用户
提问于 2014-03-09 04:09:45
回答 3查看 218关注 0票数 3

我需要一起执行两个SQL语句,因为第一个语句中的connection_id()将在Mysql视图wp_statistics_benchmarks中使用。

没有connection_id()wp_statistics_benchmarks就是一个空视图。以下SQL运行良好,并获得了结果:

代码语言:javascript
复制
replace into wp_params (`view_name` , `param1_val`, `connection_id`) 
                values ('benchmarks', 484         , connection_id())
;

select * from wp_statistic_benchmarks;

但是,要使用wordpress,以下代码不起作用:

代码语言:javascript
复制
$mysqli  = new mysqli(.....);

$results = $this->_wpdb->query("
     replace into wp_params (`view_name`, `param1_val`, `connection_id`) 
                values ('benchmarks', $connected_from, $mysqli->thread_id);

     select * FROM `wp_statistic_benchmarks`;"
);

如何将这两个mysql代码转换为Wordpress wpdb查询?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-19 13:34:58

如果我理解您的需求(我不知道wordpress),那么您将使用一个名为wp_params的列向connection_id插入一行。我假设这个值在表中是唯一的。我会尝试将一个整数自动增量id字段添加到表中,然后获取该字段的值(最后一次插入id)。然后,在从视图中选择时,在WHERE子句中使用此id。

票数 0
EN

Stack Overflow用户

发布于 2014-03-09 04:23:15

两次使用wpdb对象。

代码语言:javascript
复制
$this->_wpdb->query('replace into ...'); 
$rows = $this->_wpdb->get_results('select ...')

让我换一种说法,select *从wp_stat .替换成wp_params .从原始的"mysql代码“中提取的是单独的语句,彼此之间没有任何关系。

你认为你需要按顺序运行它们,而实际上你可以喝一杯咖啡,甚至在这些替换语句和选择语句之间绕地球旅行,它们仍然会做同样的事情。如果不是这样的话,那么您的问题就缺乏提供一个好答案所必需的信息,因为wp_params不是wordpress中的标准表,视图也不是。我觉得你不明白你的问题。

此外,正如我建议的那样,使用"mysql代码“运行等效的。此外,$wpdb->query返回受影响的行数或false,因此您将永远无法使用$wpdb->query()运行select语句来检索一组元组。

票数 4
EN

Stack Overflow用户

发布于 2014-03-16 14:58:36

如何将这两个mysql代码转换为Wordpress wpdb查询?

不行,这是因为您使用的是wpdb,而且它只支持每个->query()调用一个查询。但是,如果在wpdb中使用Mysqli,则可以在wpdb中使用Mysqli的multi_query()方法。以下是如何:

要使用多个查询,您需要确保wpdb使用Mysqli (例如,在Wordpress配置中将USE_EXT_MYSQL常量定义为FALSE )。

然后可以使用反射或助手类/模块从wpdb对象获得mysqli实例:

代码语言:javascript
复制
abstract class wpdb_dbh extends wpdb
{
    static function from(wpdb $wpdb) {
        return $wpdb->dbh;
    }
}

这样,Mysqli就可以使用了,而无需创建新实例:

代码语言:javascript
复制
$mysqli = wpdb_dbh::from($this->_wpdb);

由于这是一个有效的Mysqli实例,所以可以运行多查询

但是,仅仅获得与wpdb使用相同的Mysqli实例,可能是这里最重要的事情,否则您需要防止与new mysqli(...)打开一个额外的连接。

此外,请注意,$mysqli->thread_idconnection_id()的适当替代品,采用相同的格式/编码。无论如何,您应该能够直接使用connection_id(),因此我实际上并没有看到访问thread_id成员的多少理由,但这可能只是因为您尝试了一些替代方法,而我只是过于谨慎。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22278281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档