1

尋找一個星期,並沒有發現我可以用來執行存儲過程的一些內容。 場景:從php代碼調用存儲過程

我抄上的SQL Server 2014管理Profiler窗口運行的代碼。

我打開SQL Studio和HeidiSQL並運行查詢,它運行正常並返回給我預期的結果。

當我試圖粘貼和修改這些內容來獲得相同的結果,因爲我對SQL客戶端並沒有運行像它在SQL客戶端一樣。 我該如何做到這一點?

例如:在我的SQL中,我有128個變量,我必須聲明來運行存儲過程,但要更簡單我只會發佈一個變量記住sintaxe是相同的一個或128個變量正確嗎?

declare @var01 varchar(1000) set @var01='.$var01.' 

EXEC 
stored_procedure_y 
@var01 output 

SELECT 
@var01 AS any_value 

我已經嘗試了許多方法來執行,但沒有成功的SQL命令。 一些例子,我試圖運行:

  • 最後

    ​​

    不要工作。

  • 其他

    $query = $this->db->query(' 
    declare @var01 varchar(1000) set @var01='.$var01.' 
    EXEC 
    operacao_sitef 
    @var01 output 
    SELECT 
    @var01 AS any_value 
    '); 
    return $query; 
    

也沒有工作。 任何幫助,將不勝感激。我是SP的新手,不知道如何使用codeigniter調用它並收集結果以完成操作。

回答

1

很高興說我會保持我的工作。

這裏解決了我的問題。 緬懷我跟笨PHP和MSSQL數據庫的工作:

在模型:

public function execute_sp($var1 = NULL,$var2 = NULL, $var3 = NULL, $var4 = NULL, $var5 = NULL, $var6 = NULL, $var7 = NULL, $var8 = NULL, $var9 = NULL, $var10 = NULL){ 
$sp = "stored_procedure_name ?,?,?,?,?,?,?,?,?,? "; //No exec or call needed 

//No @ needed. Codeigniter gets it right either way 
$params = array(
'PARAM_1' => NULL, 
'PARAM_2' => NULL, 
'PARAM_3' => NULL, 
'PARAM_4' => NULL, 
'PARAM_5' => NULL, 
'PARAM_6' => NULL, 
'PARAM_7' => NULL, 
'PARAM_8' => NULL, 
'PARAM_9' => NULL, 
'PARAM_10' =>NULL); 

$result = $this->db->query($sp,$params); 

在控制器:

$var1 = 'value'; 
$var2 = 'value'; 
$var3 = 'value'; 
$var4 = 'value'; 
$var5 = 'value'; 
$var6 = 'value'; 
$var7 = 'value'; 
$var8 = 'value'; 
$var9 = 'value'; 
$var10 = 'value'; 

$this->model->sp($var1, $var2, $var3, $var4, $var5, $var6, $var7, $var8, $var9, $var10); 

它的工作原理!

源,幫助這麼多:從用戶Issue executing stored procedure from PHP to a Microsoft SQL SERVER回覆@Ulises Burlando

0
function() { 
    $query = $this->db->query("EXEC USP_RoughBlockStockRegister'08/23/2017','08/23/2017',1,1"); 
    return $query->result(); 
} 
2

我解決了這個樣子。

我正在使用PDO驅動程序。

simple_query方法返回PDOStatement對象對象,一個很重要的一點SET NOCOUNT ON

class Pump_Model extends CI_Model 
{ 
    public function getPumpStatisticSpById($pumpId) 
    { 
     $result = $this->db->simple_query("SET NOCOUNT ON 
          DECLARE @return_value int 
          EXEC @return_value = [dbo].[spPumpStatistics] 
            @PumpID = $pumpId")->fetch(PDO::FETCH_OBJ); 
     return $result; 
    } 

} 
+1

好知道。可以幫助人們在PDO案件。在我的情況下,我無法使用PDO,因爲系統使用的是MSSQL驅動程序,EXEC不是使用Amazon RDS的選項 –