2012-08-04 82 views
0

我似乎無法使用PDO(PHP)從我的存儲過程(MYSQL)獲取任何輸出。無法通過PDO獲取存儲過程結果集PHP

存儲過程:

CREATE PROCEDURE getUserId(serviceId VARCHAR(64), serviceInput VARCHAR(32)) 
BEGIN 
    SELECT id FROM users WHERE servid = serviceId AND service = serviceInput; 
END 

PHP代碼:

$mysqlConn = mysqlPDOLogin(); 
$stmt = $mysqlConn->prepare("CALL getUserId(?,?);"); 
$stmt->bindParam(1, $USERID); 
$stmt->bindParam(2, $USERPROVIDER); 
$stmt->execute(); 
$returned_a = $stmt->fetch(); 
echo $returned_a['id']; 

它沒有得到任何東西回來。我從存儲過程中複製了基本的選擇代碼,並直接在PHP代碼中使用它,它可以工作,但無法通過存儲過程使其工作。

任何幫助,將不勝感激......

回答

0

你沒有做任何明顯的錯誤檢查。 Prepare(),bindParam()和execute()都會通過返回false或拋出異常來提醒您錯誤,具體取決於PDO所處的錯誤報告模式。

我打算假設您處於「返回假」模式。

您需要檢查$ stmt是PDOStatement對象,bindParam語句沒有返回false並且該執行沒有返回false。如果他們中的任何一個那麼你需要使用errorCode()和errorInfo()來找出錯誤。

此外,對於基本上是簡單查詢的存儲過程,我看起來有些過分。爲什麼不只是做以下?

$stmt = mysqlConn->prepare ('SELECT id FROM users WHERE servid = ? AND service = ?'); 
+0

感謝您的幫助。 沒有顯示錯誤..我使用echo($ stmt-> errorCode())來檢查錯誤並沒有任何東西。 我確實有過這樣的事情,但之前使用mysqli而不是pdo,它抱怨我綁定的結果的數量(可能是因爲它沒有得到結果集。)但是,我最終沒有打擾到它,現在一個不同的項目即時通訊使用PDO和我得到同樣的問題,無法從存儲過程得到任何回覆... PS:我不想發佈一個巨大的存儲過程出於安全原因,它使問題複雜化。 – 2012-08-04 06:26:10

相關問題