查询在Workbench中有效,但在ColdFusion中返回错误

|| 我已经创建了一个用于从FreeRADIUS访问记帐数据的存储过程,该存储过程已在MySQL Workbench中进行了测试,并且运行良好,但是当以cfquery / cfstoredproc身份运行时,出现错误“执行参数不正确”。 我已经检查了为MySQL 4/5设置的驱动程序(数据库为MySQL 5),并尝试从MySQL Workbench复制和粘贴调用并在不使用cfqueryparam的情况下运行,如下所示,但它仍然返回相同的错误。 存储过程是使用以下命令创建的
DELIMITER $$
CREATE PROCEDURE radius.GetUserDataUsageForMonth(IN StartDate DATE, IN EndDate DATE, IN UserName     
VARCHAR(100))
BEGIN

SET @records = (SELECT COUNT(UserName) FROM `radius`.`radacct` WHERE userName = @UserName AND AcctStartTime BETWEEN @StartDate AND @EndDate) - 1;

SET @SqlQuery = \'SELECT SUM(AcctOutputOctets) AS BytesIN, SUM(AcctInputOctets) AS BytesOUT FROM
        (SELECT * FROM `radius`.`radacct` WHERE userName = @UserName AND AcctStartTime BETWEEN @StartDate AND @EndDate LIMIT ? 

        UNION ALL

        SELECT * FROM `radius`.`radacct` WHERE userName = @UserName AND AcctStartTime < @StartDate ORDER BY AcctStartTime DESC LIMIT 1) AS Totals;\';

PREPARE stmt FROM @SqlQuery;
EXECUTE stmt USING @records;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
打电话给我,我正在使用:
<cfquery name=\"qRadAccount_currentData\" datasource=\"#application.datasource_radius#\">
    CALL radius.GetUserDataUsageForMonth(\'2011-06-01\',\'2011-07-01\',\'ryan.french\');
</cfquery>
我也尝试过
<cfstoredproc procedure=\"radius.GetUserDataUsageForMonth\" datasource=\"#application.datasource_radius#\" result=\"qRadAccount_currentData\">
    <cfprocparam cfsqltype=\"cf_sql_date\" value=\"2011-06-01\">
    <cfprocparam cfsqltype=\"cf_sql_date\" value=\"2011-07-01\">
    <cfprocparam cfsqltype=\"cf_sql_varchar\" value=\"ryan.french\">
</cfstoredproc>
    
已邀请:
        问题是由生产线引起的
SET @records = (SELECT COUNT(UserName) FROM `radius`.`radacct` WHERE userName = @UserName AND AcctStartTime BETWEEN @StartDate AND @EndDate) - 1;
当作为查询运行时,这将返回正确的值,但是当这些值作为存储过程从ColdFusion传入时,结果为-1(在查询中未找到行)。 我主要处理MS SQL,但我相信在MySQL中,@符号定义了局部变量或会话变量。结果,从ColdFusion调用时,变量不存在,从而导致错误。 我将上面的行替换为
SET @records = (SELECT COUNT(UserName) FROM `radius`.`radacct` WHERE userName = UserName AND AcctStartTime BETWEEN StartDate AND EndDate) - 1;
并调用存储过程返回正确的结果。     

要回复问题请先登录注册