【问题标题】:PHP Pdo SELECT VIEW query failsPHP Pdo SELECT VIEW 查询失败
【发布时间】:2018-10-04 18:51:05
【问题描述】:

我正在尝试在 PHP 7.1 中运行以下查询

$pdoClient->exec("DROP VIEW IF EXISTS my_view;

          CREATE VIEW my_view AS 
           select option_name,option_value from db1.options 
          UNION ALL 
           select option_name,option_value from db2.options;
");

$pdoClient->query("SELECT * from my_view WHERE option_name = 'blabla'";

我得到了错误

No database selected (SQLSTATE=3D000, CODE=1046).

但如果我在 Pdo 构造函数中添加数据库或添加“USE db1;”上面的陈述我得到了

Table 'db1.my_view' doesn't exist (SQLSTATE=42S02, CODE=1146). 

由于某种原因,它认为我正在尝试运行表而不是视图。

有什么想法吗?

【问题讨论】:

  • 你知道你可以传递数据库在PDO构造函数中使用吗?
  • 您在$create 中缺少"。在进行连接时也要传递数据库名称
  • 这是一个伪代码。是的,我在构造函数中传递了数据库,但没有帮助。
  • 您不能对 PDO 查询使用超过 1 条语句。分别传递每个语句。
  • @aynber 他们是 2 个陈述。

标签: php mysqli pdo


【解决方案1】:

正如我所提到的,您不能通过 PDO 传递超过 1 条语句。您需要将它们分开,如下所示。它都被视为一个连接,它将单独运行每个命令。

$create = "CREATE VIEW my_view AS 
           select option_name,option_value from db1.options 
          UNION ALL 
           select option_name,option_value from db2.options";
$pdoClient = new PDO("mysql:host=$host;port=$port", $user, $pass);
$pdoClient->exec("USE db1"); // Select the database
$pdoClient->exec("DROP VIEW IF EXISTS my_view");
$pdoClient->exec($create);

完成此操作后,选择将正常工作,如下所示:

$pdoClient->query($select); 

【讨论】:

  • 我试过这个。我仍然得到 Table 'db1.my_view' doesn't exist (SQLSTATE=42S02, CODE=1146)。
  • 是的,您可以在 PDO 中添加多语句。
  • 尝试在 create 语句之后检查 PDO errors 以确保它正确运行。
  • 仅当您将 PDO::ATTR_EMULATE_PREPARES 设置为关闭时(我经常忘记)
  • 这不是问题。整个问题是我无法使用 PDO 从视图中进行选择
猜你喜欢
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2012-07-25
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 2017-08-18
相关资源
最近更新 更多