kingshard icon indicating copy to clipboard operation
kingshard copied to clipboard

php使用pdo链接,参数PDO::ATTR_EMULATE_PREPARES 设为false 报错

Open zhikeye opened this issue 8 years ago • 13 comments

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时又不会报错。

zhikeye avatar Feb 22 '17 02:02 zhikeye

预处理吧?kingshard不支持分表情况下的预处理。

flike avatar Feb 22 '17 13:02 flike

不分表情况下也会报错 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 avatar Jun 05 '17 11:06 xmby

@xmby 查看下代码或者驱动里是否有使用mysql_stat,如果有可以注掉。

niubell avatar Jun 06 '17 04:06 niubell

@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 avatar Jun 06 '17 11:06 xmby

@xmby 看起来像是发过来的报文非法了,可以搞个pdo测试程序连接ks测试一下,估计还是设置的问题。

niubell avatar Jun 06 '17 15:06 niubell

@xmby 应该是这个set命令不支持。

flike avatar Jun 08 '17 01:06 flike

//$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //$status = $pdo->getAttribute(PDO::ATTR_SERVER_INFO); 不支持COM_STATISTICS指令,ATTR_EMULATE_PREPARES这个我再确认下 上述使用方式应该能满足你的需求

niubell avatar Jun 09 '17 02:06 niubell

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 这个设置为了解决mysql返回的字段值全变成string型的问题,如果注释对android和ios移动客户端影响较大

xmby avatar Jun 09 '17 03:06 xmby

你能不能把这条SQL 完整的打印出来,看看到底是什么类型的SQL ?

flike avatar Jun 12 '17 01:06 flike

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

xmby avatar Jun 12 '17 02:06 xmby

感谢@season89 @flike 帮忙调试,目前还是无法解决。测试了proxysql,新版已支持上述PDO设置

xmby avatar Jun 18 '17 06:06 xmby

同样遇到该问题 😂

st7yws avatar Apr 20 '19 22:04 st7yws

遇到同样问题

liuxzhi avatar Mar 09 '22 02:03 liuxzhi