PHP Pdo SELECT VIEW查询失败

时间:2018-04-24 13:25:54

标签: php mysqli pdo

我正在尝试在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). 

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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

正如我所提到的,你不能在via 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);

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

$pdoClient->query($select);