【发布时间】:2013-05-20 02:38:08
【问题描述】:
我正在将一些旧的 PHP 页面转换为使用 PDO。
以下是两个简化的查询(不是我的实际查询),以帮助理解我遇到的问题...
SELECT afield INTO #temptable FROM atable WHERE anotherfield = 'somevalue';
SELECT afield,anotherfield,onemorefield FROM atable
WHERE afield NOT IN (SELECT * FROM #temptable);
上面的查询抛出了标题中描述的错误(更完整的是它抛出“致命错误:未捕获的异常'PDOException'并带有消息'SQLSTATE [IMSSP]:查询的活动结果不包含任何字段。'”)
如果我像这样更改查询...
with (SELECT afield INTO #temptable FROM atable
WHERE anotherfield = 'somevalue') AS temptable;
SELECT afield,anotherfield,onemorefield FROM atable
where afield NOT IN (SELECT * FROM temptable);
这似乎绕过了错误,但这个版本的查询效率极低,因为它似乎为另一个查询中的每个字段比较运行临时查询。
有没有办法让第一个表单(创建一次临时表)与 PDO 一起工作?
它在使用 mssql 的旧页面上运行良好。
编辑:我知道我可以通过创建一个真实的表,在 php 中运行它,然后运行第二个查询(在一个单独的 php 调用中),然后运行第三个查询以删除第一个表。但我宁愿不必诉诸于此! :)
【问题讨论】:
-
注意像
SELECT, WHERE, FROM ...这样的SQL关键字应该大写。这将提高可读性。你应该先从这个开始 -
你真的用分号
;分隔查询吗? -
试过了。没有区别。
-
我没有 SQL Server,无法测试。可能是底层 sqlclient C 库有问题
标签: php sql-server pdo