[英]ODBC, PHP and SQL Variables
我有一个相当大,复杂的SQL块,用于为特定页面创建报告。 该SQL在顶部有几个变量声明,我怀疑这给我带来了问题。
当我得到ODBC结果时,我必须使用odbc_next_result()
来odbc_next_result()
似乎随变量返回的空结果集。 那似乎没问题。 当我最终得到“真实”结果时, odbc_num_rows()
告诉我它有超过odbc_num_rows()
行,而实际上它有6行。
这是我正在做的一个示例,目的是为了让您有个想法,而无需进一步讨论类定义:
$report = $db->execute(Reports::create_sql('sales-report-full'));
while(odbc_num_rows($report) <= 1) {
odbc_next_result($report);
}
echo odbc_num_rows($report);
SQL看起来像这样:
DECLARE @actualYear int = YEAR(GETDATE());
DECLARE @curYear int = YEAR(GETDATE());
IF MONTH(GETDATE()) = 1
SELECT @curYear = @curYear - 1;
DECLARE @lastYear int = @curYear-1;
DECLARE @actualLastYear int = @actualYear-1;
DECLARE @tomorrow datetime = DATEADD(dd, 1, GETDATE());
SELECT * FROM really_big_query
一般而言, set nocount on
指令中set nocount on
来启动每个存储过程或要执行的命令批,这总是一个好主意-告诉SQL Server set nocount on
通过ODBC(或ADO,向客户端应用程序发送“行影响”的消息)等等。)。 这些消息会影响性能,并导致在结果集中创建空的记录集-这会导致应用程序开发人员付出更多的努力。
我还使用了ODBC驱动程序,如果您忘记抑制这些消息,该驱动程序实际上会出错-因此,当我开始编写任何新的存储过程时,立即输入set nocount on
成为本能。
有许多与此主题相关的问题/答案,例如,在SQL Server查询中关闭NOCOUNT的优点和缺点是什么? 和SET NOCOUNT ON用法 ,涵盖了此命令的许多其他方面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.