Mysql 使用事先准备好的语句中不支持的信息模式,但使用I';我没有使用准备好的支架?

Mysql 使用事先准备好的语句中不支持的信息模式,但使用I';我没有使用准备好的支架?,mysql,pdo,Mysql,Pdo,查询: $PDO->query('use `INFORMATION_SCHEMA`'); 在以下情况下失败: SQLSTATE[HY000]:一般错误:2030预处理语句协议尚不支持此命令。 但是我没有将prepared语句与prepare()+execute()一起使用。对于这个查询,我使用的是query()方法。我如何解决这个问题 版本信息: PHP版本:5.5.9-1ubuntu4 mysql版本:14.14发行版5.5.35,适用于使用readline 6.3的debian li

查询:

$PDO->query('use `INFORMATION_SCHEMA`');
在以下情况下失败:

SQLSTATE[HY000]:一般错误:2030预处理语句协议尚不支持此命令。

但是我没有将prepared语句与
prepare()
+
execute()
一起使用。对于这个查询,我使用的是
query()
方法。我如何解决这个问题

版本信息

PHP版本:
5.5.9-1ubuntu4


mysql版本:
14.14发行版5.5.35,适用于使用readline 6.3的debian linux gnu(x86_64)

我认为问题在于您试图在PDO->query方法中使用“use”命令。“use”命令通常在使用MySQL命令行工具时使用,用于选择数据库

创建PDO时,通常指定要使用的数据库。以以下为例:

$DBH = new PDO("mssql:host=$host;dbname=$dbname, $user, $pass");
创建数据库处理程序PDO需要四件事:

  • 主人
  • 数据库名称
  • 用户名
  • 密码
您可能正在连接到另一个数据库,然后尝试执行查询以切换数据库(我不知道,因为您没有列出PDO声明语句)。我不认为PDO是设计来做这件事的

如果要连接到信息模式数据库,则应在PDO中进行连接或创建另一个PDO

$DBH = new PDO("mssql:host=$host;dbname=INFORMATION_SCHEMA, $user, $pass");

希望这能解决您的问题。

我无法重现这种行为。您使用的是什么PHP版本?您使用的是本机PDO还是某个类对其进行了扩展?为问题添加了版本。您可以始终使用exec()作为解决方法。。。但我想知道是什么导致了这个错误……这是旧版本的MySQL错误:您是否尝试过用PDO::setAttribute更改PDO::ATTR_EMULATE_?