【问题标题】:Running a sql server stored procedure using CakePHP使用 CakePHP 运行 sql server 存储过程
【发布时间】:2014-10-10 02:10:51
【问题描述】:

我想知道这是否是使用 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 我检查了日志,似乎没有关于存储过程问题的日志。
  • 好的...你检查我的答案是否有效,因为在我这边这种语法有效,唯一的区别是我使用的是 mysql
  • 我还在尝试。
  • 这是哪个版本的 CakePHP?

标签: php sql-server cakephp stored-procedures


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    这样试试

    我假设您的程序名称是 uspGetVendorVehicleManifest

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

    我在 mysql 中使用过程方法,因为实际上 cakephp 使用 pdo 我认为这种方法应该可以工作。让我知道会发生什么,因为我也想了解它是如何完成的。

    【讨论】:

    • 我会试试这个,但如果更糟,情况会变得更糟。我也可能会创建一个新的存储过程,似乎 cakephp 在非常复杂的存储过程方面存在一些问题
    猜你喜欢
    • 2020-02-24
    • 2016-04-28
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多