2017-09-23 33 views
1

此代碼有什麼問題?PHP PDO聲明:PROCEDURE的參數數量不正確

$statement = $dbConn->prepare("CALL SearchUser(?)"); 
$statement->bindParam(1, $username, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

這是程序:

CREATE PROCEDURE SearchUser(IN Username VARCHAR(10), OUT numRows INT) 
BEGIN SELECT COUNT(*) INTO numRows 
FROM USER 
WHERE Username='IN'; 
END// 

的錯誤是:不正確的數量爲過程參數,預計2拿到1 爲什麼呢?謝謝。

+2

你在哪裏供應'numRows'的說法? – David

+0

我不知道你的意思; numRows必須是過程的輸出參數。不是嗎?謝謝。 – JamieITGirl

+0

可能重複https://stackoverflow.com/questions/13382922/calling-stored-procedure-with-out-parameter-using-pdo或者可能https://stackoverflow.com/questions/118506/stored-procedures-mysql -and-php/4502524#4502524以太方式同時讀取兩個答案 – RiggsFolly

回答

1

你需要傳遞兩個參數

$statement = $dbConn->prepare("CALL SearchUser(?,?)"); 
$statement->bindParam(1, $username, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 
$statement->bindParam(2, $rowcount, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT); 

您可以參考此article

+0

但是rowcount是程序的輸出參數,爲什麼我必須通過它?無論如何,我試着用這個結果: 1414 OUT或INOUT參數2用於例程SearchUser不是變量或BEFORE觸發器中的NEW僞變量 – JamieITGirl

+0

當您獲得輸出時,您需要將其保存在某處。對 ? – unnamed

+0

@JamieITGirl你指的是,似乎是一個錯誤。請參考這個答案https://stackoverflow.com/questions/10428480/php-bindparam-does-not-seem-to-work-with-a-param-int-out-parameter – unnamed