如何从 SQL 中的视图中选择? (一般错误:1615 Prepared statement需要重新准备)

Posted

技术标签:

【中文标题】如何从 SQL 中的视图中选择? (一般错误:1615 Prepared statement需要重新准备)【英文标题】:How to SELECT from a view in SQL? (General error: 1615 Prepared statement needs to be re-prepared) 【发布时间】:2017-11-28 19:49:38 【问题描述】:

更新: 查询运行良好,如下所示;只有当我从视图中选择时才会出现错误。

$query = "
SELECT ModuleID, ModuleName, Credits, Lecturer, Room, EmployeeID, Forename, Surname, RoomID, RoomCode
FROM ((Module 
INNER JOIN Employee ON Module.Lecturer = Employee.EmployeeID) 
INNER JOIN Room ON Module.Room = Room.RoomID)
";

$result = $DBH->prepare($query);
$result->execute();
$data = $result->fetchAll();

我在尝试 SELECT * FROM 我创建的视图时收到以下错误。 (从表格中选择非常有效)。

带有消息“SQLSTATE[HY000]”的未捕获异常“PDOException”:一般错误:需要重新准备 1615 准备好的语句

使用时没有问题

SELECT * FROM Module

这是我的查询:

$query = "
SELECT * FROM module_info
";

$result = $DBH->prepare($query);
$result->execute();
$data = $result->fetchAll();

我创建的视图:

CREATE VIEW module_info 
AS
SELECT ModuleID, ModuleName, Credits, Lecturer, Room, EmployeeID, Forename, Surname, RoomID, RoomCode
FROM ((Module 
INNER JOIN Employee ON Module.Lecturer = Employee.EmployeeID) 
INNER JOIN Room ON Module.Room = Room.RoomID);

【问题讨论】:

您使用的是什么 DBMS?您可以在视图中运行选择吗? 使用 mysql 数据库,使用工作台创建 SQL 脚本 @RadimBača @RadimBača 运行 SELECT * FROM module_info;在工作台中产生正确的输出,没有错误 以下链接已旧,但您是否考虑增加table_definitition_cache? ***.com/questions/4380813/… 括号怎么了????括号太多了。 【参考方案1】:

本例的解决方法如下:

需要启用准备好的语句的模拟。

在连接文件中,下面一行

PDO::ATTR_EMULATE_PREPARES   => false,

需要像这样改变:

PDO::ATTR_EMULATE_PREPARES   => true,

在其他情况下,解决方案可能是增加table_definitition_cache

【讨论】:

以上是关于如何从 SQL 中的视图中选择? (一般错误:1615 Prepared statement需要重新准备)的主要内容,如果未能解决你的问题,请参考以下文章

从 SQL Server 中的视图中选择别名

如何使用从视图到控制器的 ViewBag 在 SQL Db 中存储多个复选框选择?

如何绕过Javascript中的sql注入错误

如何解决 Oracle Apex 中的“无法使用 DISTINCT、GROUP BY 等从视图中选择 FOR UPDATE”错误?

SQL根据一列中的最大值从多列中选择不同的行

SQL 从视图中的 4 个表中选择