使用CakePHP运行SQL Server存储过程

3
我在想使用CakePHP运行Microsoft SQL Server存储过程时,这是否是正确的语法。在CakePHP中执行存储过程的语法是否正确?
$this->Main->query("Exec uspGetVendorVehicleManifest '1/6/2014', 'wali.americantour', @pcolVehicleVendorIDInt = 1,@pRouteFrom = 0, @pRouteTo = 0");

存储过程具有以下参数:
    @pDate              AS DATE,
    @pUserID            AS VARCHAR(50),
    @pRegionIDInt       AS INT,
    @pPortIDInt         AS INT,
    @pcolVehicleVendorIDInt AS INT,

    @pStartRow          AS INT,
    @pMaxRow            AS INT,
    @pLoadType          AS INT,
    @pOrderby           AS VARCHAR(20),

    @pRouteFrom         AS TINYINT,
    @pRouteTo           AS TINYINT,
    @pCityFrom          AS VARCHAR(5),
    @pCityTo            AS VARCHAR(5),
    @pStatus            AS VARCHAR(4),
    @pRole              AS VARCHAR(50)

我只使用了一些参数,因为其他参数并不重要。

这样说对吗?


你的日志文件夹tmp/logs中记录了什么信息? - justrohu
@justrohu,我已经检查了日志,似乎没有有关存储过程问题的日志记录。 - marchemike
好的...你检查了我的答案吗?它是否有效,因为在我的这一边,这个语法是有效的,唯一的区别是我正在使用mysql。 - justrohu
我还在尝试。 - marchemike
这是哪个版本的CakePHP? - icc97
2个回答

3

我终于找到了解决方法。你可以使用exec命令,然后将该值添加到你将要使用的参数中。

$this->ControllerName->query("exec storedProcedure @param1 = 1");

我注意到当我在cakephp上运行它时,使用php 5.5版本,apache服务很可能会崩溃。可能是因为我正在使用非官方的phppdo。


1

尝试像这样

我假设您的过程名称为uspGetVendorVehicleManifest

$query = "call uspGetVendorVehicleManifest('1/6/2014', 'wali.americantour', @pcolVehicleVendorIDInt = 1,@pRouteFrom = 0, @pRouteTo = 0)";

$result = $this->query($query);

我使用mysql的过程方法,因为cakephp在底层使用pdo,我认为这种方法应该可以工作...让我知道发生了什么,因为我也想学习如何做到这一点。


我会尝试使用这个方法,但如果情况变得更糟的话,我可能会创建一个新的存储过程。似乎cakephp在处理非常复杂的存储过程方面存在一些问题。 - marchemike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接