【问题标题】:Create view using PDO fails使用 PDO 创建视图失败
【发布时间】:2018-10-04 21:25:12
【问题描述】:

我将我的 PDO 定义如下

    $pdo = new PDO("mysql:host=$host;port=$port;dbname=db1", $user, $pass);

然后我尝试在 db1 中创建一个视图

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

    $pdo->beginTransaction();
    $pdo->exec($query);
    $result = $pdo->commit();
    if ($result) {
        print_r("COMMIT OK!");
    } else {
        print_r("COMMIT FALSE");
        $pdo->rollBack();
    }

我得到“COMMIT OK”作为输出,但转到数据库时我根本看不到任何视图。

想法?

【问题讨论】:

  • 改用$query = "CREATE VIEW my_view AS ( select option_name,option_value from db1.options UNION ALL select option_name,option_value from db2.options )"
  • @RaymondNijland 不起作用。
  • 小注 DDL命令默认执行一个提交,你不能停止那个提交。所以你的提交是不必要的。由于这种自动提交,请注意您运行 DDL 的位置,因为它还会提交您可能拥有的任何其他内容In Flight 哦,那当然是您获得正确的 DDL 语法的时候!
  • “我得到“COMMIT OK”作为输出,但进入数据库我看不到任何视图。“你是如何验证的?我的意思是你使用的是什么 MySQL 管理程序?
  • Raymond - 在 PDO 中,当我选择“表 'NxAzwWswQf1Aw71r.testme' 不存在(SQLSTATE=42S02,CODE=1146)时,我得到了这个。” - 我使用工作台,也是终端,没有任何效果。

标签: php mysqli pdo mariadb


【解决方案1】:

调用 exec 后检查错误。

在每个 SELECT 子句周围添加括号。 (除非您有ORDER BY 等,否则不需要)

抛出交易代码。 (见评论。)

你有读取 db1 和 db2 的权限吗?

你是这样检查视图的吗?

USE db1;
SHOW CREATE VIEW my_view;

如果您检查了其他方式,请详细说明。

【讨论】:

    猜你喜欢
    • 2021-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2014-02-11
    相关资源
    最近更新 更多