繁体   English   中英

ODBC,PHP和SQL变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM