2013-12-17 109 views
2

我想在一個MS sql服務器的實例中執行一個存儲過程,使用來自mac的php。使用PDO在php中運行一個MS SQL服務器存儲過程

我最近買了一個mac書專業版,似乎有實現這個問題的實際問題。

我現在已經建立的連接,我知道是工作,如果我更改密碼我得到的消息:

"Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[01002] Adaptive Server connection failed (severity 9)' in /Users/davidwhitwell/Sites/test/connect.php on line 6" 

更正密碼不給我的錯誤。

我試圖運行的腳本是:

$sql = $pdo->prepare("CALL [finance].[get_all_company_names]"); 
    $sql->execute(); 
    $results = $sql->fetchAll(); 
    var_dump($results); 

結果返回一個空數組。我知道數據存在,並且執行該過程的權限正確,因爲我可以直接使用sql server management studio執行此操作。

+0

可以運行與此相聯繫的一般查詢叫什麼名字?即從某個表中選擇*。是否有任何來自errorInfo的輸出:http://www.php.net/manual/en/pdo.errorinfo.php – Robbert

+0

不,即使使用一般選擇查詢,我也沒有得到任何返回 –

回答

1

由於您提到您無法檢索任何數據,即使使用簡單的選擇查詢,我也建議在腳本中添加一些錯誤處理。

首先,我會添加一些異常處理到您的一般pdo對象。

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

這會在查詢失敗時引發異常。然後換你的執行在一個try/catch語句

try { 
    $sql = $pdo->prepare("CALL [finance].[get_all_company_names]"); 
    $sql->execute(); 
    $results = $sql->fetchAll(); 
    var_dump($results); 
} catch (PDOException $e) { 
    echo 'An error occurred: ' . $e->getMessage(); 
} 

的SQL和PDO對象創建也有一個名爲errorInfo中的方法,這有時會顯示錯誤。

if($sql->execute()) { 
    $results = $sql->fetchAll(); 
} 
else { 
    $error_info = $dbh->errorInfo(); 
    print_r($error_info); 
} 

一些很好的資源,包括這些頁面

編輯

我相信UL timate的是,在MS SQL存儲過程使用EXEC

$sql = $pdo->prepare("EXEC [finance].[get_all_company_names]"); 
+0

感謝Robert,第一條建議返回: 「出現錯誤:SQLSTATE [HY093]:無效的參數號:未綁定任何參數」此存儲過程沒有參數,但 –

+0

第二個建議返回Fatel錯誤:帶有消息'SQLSTATE [HY093]的未捕獲異常'PDOException':無效的參數號碼:沒有參數被綁定' –

+0

當你做一個簡單的選擇時,你會得到這個消息嗎? – Robbert