我有一个公用表表达式,可以在mssql编辑器上正常工作。但是,当我在PHP中使用相同的填充字符串变量并使用odbc_exec($dbhandle,$query )
时,它不返回任何行。不会抛出任何错误。这是对PHP的限制吗?其他各种表上的其他选择查询运行正常。问题仅出在CTE声明中。
答案 0 :(得分:1)
我知道这是一个老问题,但它没有得到回答,这是一个高排名的谷歌结果,所以我以为我会插手。
查询MS SQL服务器的本机PHP方法都不支持公用表表达式('WITH'子句)。这些包括mssql_ *库和odbc_ *库。
这是由于MS SQL处理CTE的方式(通过创建宏来执行)。好消息是微软的图书馆(sqlsrv_ *)DO原生支持CTE。
sqlsrv_ *库在创建和使用连接,简单查询,预处理语句等方面与mssql_ *的运行方式相同。它们几乎是将mssql_ *或odbc_ *与MS SQL服务器一起使用的“替代”替代方案,并且启动速度要快得多。
您可以从this link获取sqlsrv库。在撰写本文时,2.x适用于SQL 2008,但SQL 2012需要3.x.