yield 使用临时表时出现问题
nekic opened this issue · 1 comments
nekic commented
当我使用 yield 创建临时表时,返回结果应该创建成功并且有记录的,但是查询临时表时报错,提示 临时表不存在!
以下示例代码:
{
// 删除临时表
$db = yield $this->getMysqlPool('master');
$tableName = 'tmp_user_info';
$dropSql = 'DROP TABLE IF EXISTS ' . $tableName .';';
yield $db->go(null,$dropSql);
$querySql = "SELECT * FROM user_info WHERE create_at = '1514691308'";
$createTmpTblSql = "CREATE TEMPORARY TABLE {$tableName} ({$querySql}) ;";
$res1 = yield $db->go(null,$createTmpTblSql);
dump($res1);
/* 输出结果
[
'client_id' => 0
'result' => true
'affected_rows' => 8
'insert_id' => 0
]
*/
$res2 = yield $db->select('*')->from($tableName)->limit(1)->go();
dump($res2);
/*
* [mysql]:Table 'demo_user.tmp_user_info' doesn't exist[sql]:SELECT * FROM tmp_user_info LIMIT 1
*/
return $res2;
}`
viaweb3 commented
worker进程使用的是连接池,每次执行完MySQL的指令,连接就会归还到池中,所以每个MySQL指令对应的执行连接,实际上是不可控的,由于临时表只对当前连接有效,所以在worker进程中不能使用临时表。如果必须要使用临时表,请在task中使用,但是需要注意不要使用长连接。