2017-09-23 56 views
0

嗨我試圖使用由數據庫管理員使用PHP編寫的存儲過程,當使用指令時sqlsrv_query我得到一個消息錯誤,但我無法弄清楚它是什麼意思,謝謝你任何幫助使用PHP的存儲過程SQL服務器的問題

這是PHP代碼:

<?php        
$var_Active = 1;      
$var_PersonID = 0;    
$var_StartWeek = null;            
    $sp_name = "{CALL sp_PersonAlerts_Get(@Activ0=?,@StartWeek=?,@PersonID=?)} "; 
       $params = array(
        array($var_Active, SQLSRV_PARAM_IN), 
        array($var_StartWeek, SQLSRV_PARAM_IN), 
        array($var_PersonID, SQLSRV_PARAM_IN) 
       ); 
       $result = sqlsrv_query($gaSql['link'], $sp_name, $params) or die("<pre>" . print_r(sqlsrv_errors()) . "<br><br>$result</pre>") ;   
        $obj = sqlsrv_fetch_object($result); 
            $var_StartDate = $obj->StartDate; 
            echo 'date: '.$var_StartDate; 
       ?> 

該錯誤消息我得到的是這樣的:

Array ([0] => Array ([0] => 01000 [SQLSTATE] => 01000 [1] => 0 
[code] => 0 [2] => [Microsoft][ODBC Driver 13 for SQL Server] 
[SQL Server]@StartWeek: 2017-09-17, @EndWk: 2017-09-23 ' 
[message] => [Microsoft][ODBC Driver 13 for SQL Server] 
[SQL Server]@StartWeek: 2017-09-17, @EndWk: 2017-09-23)) 

不知道消息是什麼意思,

+0

,您是否試圖使用'execute',而不是'CALL'? – Rakib

回答

0

CALL用於mysql,但exec用於sql server執行存儲過程。此外,它不需要SQL Server的()。下面是SQL Server https://docs.microsoft.com/en-us/sql/t-sql/language-elements/execute-transact-sql

或者你可以嘗試以下的語法:

$var_Active = 1;      
$var_PersonID = 0;    
$var_StartWeek = null;  

$serverName = "serverName\sqlexpress"; 
$connectionInfo = array("Database"=>"dbName", "UID"=>"username", "PWD"=>"password"); 
$conn = sqlsrv_connect($serverName, $connectionInfo); 

if($conn === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 


$params = array(
    array('$var_Active', SQLSRV_PARAM_IN), 
    array('$var_StartWeek', SQLSRV_PARAM_IN), 
    array('$var_PersonID', SQLSRV_PARAM_IN) 
); 

$sp_name = "EXEC sp_PersonAlerts_Get @Activ0 = ?, @StartWeek = ?, @PersonID=?"; 
$stmt = sqlsrv_prepare($conn, $sp_name, $params); 

if (!sqlsrv_execute($stmt)) { 
    echo "Your code is fail!"; 
    die(print_r(sqlsrv_errors(), true)); 
} 
while($row = sqlsrv_fetch_rows($stmt)){ 
    $var_StartDate = $row['StartDate']; 
    echo 'date: '.$var_StartDate; 
} 
+0

我改變了呼叫執行,但它沒有任何區別 –

+0

您是否刪除括號()'? – Rakib

+0

你能嘗試下面的代碼來檢查你的連接嗎?:$ serverName =「(local)」; $ connectionInfo = array(「Database」=>「dbname」); $ conn = sqlsrv_connect($ serverName,$ connectionInfo); if($ conn === false) { echo「無法連接。\ n」; (print_r(sqlsrv_errors(),true)); } – Rakib