kingshard
kingshard copied to clipboard
php使用pdo链接,参数PDO::ATTR_EMULATE_PREPARES 设为false 报错
php中使用pdo链接的时候,设置了PDO::ATTR_EMULATE_PREPARES 为false ,执行
SHOW COLUMNS FROM
tablename``
会报错,报错信息为:
SQLSTATE[HY000]: General error: 1105 parse sql "SHOW COLUMNS FROM
tablename" error
但是,将PDO::ATTR_EMULATE_PREPARES设置为true时又不会报错。
预处理吧?kingshard不支持分表情况下的预处理。
不分表情况下也会报错 PHP代码设置: $pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
kingshard sys.log报错: 2017/06/05 19:45:27 - ERROR - conn.go:[327] - [ClientConn] "dispatch" "command 9 not supported now" "" conn_id=0 2017/06/05 19:45:27 - ERROR - conn.go:[280] - [server] "Run" "ERROR 1105 (HY000): command 9 not supported now" "" conn_id=10012 2017/06/05 19:45:27 - ERROR - conn.go:[280] - [server] "Run" "command *sqlparser.Set not supported now" "" conn_id=10012
帮忙看下这个问题,部署ks到测试环境,目前卡在这儿
@xmby 查看下代码或者驱动里是否有使用mysql_stat,如果有可以注掉。
@season89 有一行类似 //$status = $pdo->getAttribute(PDO::ATTR_SERVER_INFO); 注释$status,原3行报错信息变为1行: 2017/06/06 18:59:08 - ERROR - conn.go:[280] - [server] "Run" "command *sqlparser.Set not supported now" "" conn_id=10018
@xmby 看起来像是发过来的报文非法了,可以搞个pdo测试程序连接ks测试一下,估计还是设置的问题。
@xmby 应该是这个set命令不支持。
//$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //$status = $pdo->getAttribute(PDO::ATTR_SERVER_INFO); 不支持COM_STATISTICS指令,ATTR_EMULATE_PREPARES这个我再确认下 上述使用方式应该能满足你的需求
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 这个设置为了解决mysql返回的字段值全变成string型的问题,如果注释对android和ios移动客户端影响较大
你能不能把这条SQL 完整的打印出来,看看到底是什么类型的SQL ?
kingshard只有报错信息 测试代码直连mysql,打印的general log: 170602 17:53:24 86207 Connect [email protected] on sbtest 86207 Statistics 86207 Prepare set names utf8mb4 86207 Execute set names utf8mb4 86207 Close stmt 86207 Prepare select * from sbtest1 limit 1 86207 Execute select * from sbtest1 limit 1 86207 Close stmt 86207 Quit
感谢@season89 @flike 帮忙调试,目前还是无法解决。测试了proxysql,新版已支持上述PDO设置
同样遇到该问题 😂
遇到同样问题