每次客戶端連接后,第一次發(fā)送聊天信息,服務(wù)器那里執(zhí)行插入就會出錯,再發(fā)一次他就正常了。兩次發(fā)送的信息都是一樣的,除了時間。
錯誤如下:
用的GatewayWorker
INSERT INTO `xf_user_im` (`send_id`,`accept_id`,`sender`,`time`,`type`,`content`,`msg_time`) VALUES ('4','5','guwen','1467941111','txt','7','2016-07-08 09:25:09')exception 'PDOException' with message 'SQLSTATE: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.' in /home/socket/GatewayWorker/Lib/DbConnection.php:1720
Stack trace:
#0 /home/socket/GatewayWorker/Lib/DbConnection.php(1720): PDO->prepare('INSERT INTO `xf...')
#1 /home/socket/GatewayWorker/Lib/DbConnection.php(1808): GatewayWorker\Lib\DbConnection->execute('INSERT INTO `xf...', NULL)
#2 /home/socket/Applications/IM/Events.php(126): GatewayWorker\Lib\DbConnection->query('INSERT INTO `xf...')
#3 : Events::onMessage('7f0000010b54000...', '{"accept_id":"5...')
#4 /home/socket/GatewayWorker/BusinessWorker.php(360): call_user_func('Events::onMessa...', '7f0000010b54000...', '{"accept_id":"5...')
#5 : GatewayWorker\BusinessWorker->onGatewayMessage(Object(Workerman\Connection\AsyncTcpConnection), Array)
#6 /home/socket/Workerman/Connection/TcpConnection.php(422): call_user_func(Array, Object(Workerman\Connection\AsyncTcpConnection), Array)
#7 : Workerman\Connection\TcpConnection->baseRead(Resource id #38)
#8 /home/socket/Workerman/Events/Select.php(250): call_user_func_array(Array, Array)
#9 /home/socket/Workerman/Worker.php(1472): Workerman\Events\Select->loop()
#10 /home/socket/GatewayWorker/BusinessWorker.php(174): Workerman\Worker->run()
#11 /home/socket/Workerman/Worker.php(900): GatewayWorker\BusinessWorker->run()
#12 /home/socket/Workerman/Worker.php(866): Workerman\Worker::forkOneWorker(Object(GatewayWorker\BusinessWorker))
#13 /home/socket/Workerman/Worker.php(422): Workerman\Worker::forkWorkers()
#14 /home/socket/start.php(32): Workerman\Worker::runAll()
#15 {main}WORKER EXIT UNEXPECTED
有誰碰到過嗎
我暈死啊,我發(fā)現(xiàn),是發(fā)第一條過來沒問題,第二條就有問題,第三沒問題,第四條有問題。。。。
我就在onMessage開頭這樣寫而已:
$db1 = Db::instance('zhongjianbao');
if (!$db1) {
return;
}
$db1->row("SELECT id FROM {$pre}user
WHERE im_key=''");
return;
你的select結(jié)果集不是一條記錄,是多條記錄,但是調(diào)用row只取一條,緩沖區(qū)中還有未獲取的記錄,mysql驅(qū)動不允許當(dāng)上一個執(zhí)行的 PDOStatement 對象仍有未取行時,再執(zhí)行一個 PDOStatement 對象獲取數(shù)據(jù)。
可以在你的sql里面加個 limit 1應(yīng)該就能解決問題了。