文件中關於 bindParam 的長度參數是這樣說的
「要指示參數是儲存程序的 OUT 參數,您必須明確設定長度。」
對於 db2,我發現設定「INPUT_OUTPUT」參數的長度會導致 varchar 參數作為輸入參數時出現問題。我發現的問題是儲存程序被呼叫,但 varchar 輸入參數在我的儲存程序內被設定為 null,因此儲存程序無法正常工作。
這是我的儲存程序的簽名
CREATE OR REPLACE PROCEDURE MY_SCHEMA_NAME.MY_STORED_PROCEDURE_NAME ( IN RUN_ID INTEGER,IN V_SCHEMA_NAME VARCHAR(128),
OUT out_rc INTEGER, OUT out_err_message VARCHAR(100), OUT out_sqlstate CHAR(5), OUT out_sqlcode INT)
以下是可以運作的 PHP 程式碼
$command = "Call MY_SCHEMA_NAME.MY_STORED_PROCEDURE_NAME (?,?,?,?,?,?,?)";
$stmt = $this->GuestDb->prepare($command);
$stmt->bindParam(1, $RUN_ID, PDO::PARAM_INT);
$stmt->bindParam(2, $V_SCHEMA_NAME, PDO::PARAM_STR);
$stmt->bindParam(3, $V_TABNAME, PDO::PARAM_STR);
$stmt->bindParam(4, $out_rc, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);
$stmt->bindParam(5, $out_err_message, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);
$stmt->bindParam(6, $out_sqlstate, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);
$stmt->bindParam(7, $out_sqlcode, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);
以下是不會運作的 PHP 程式碼
$command = "Call MY_SCHEMA_NAME.MY_STORED_PROCEDURE_NAME (?,?,?,?,?,?,?)";
$stmt = $this->GuestDb->prepare($command);
$stmt->bindParam(1, $RUN_ID, PDO::PARAM_INT, 12);
$stmt->bindParam(2, $V_SCHEMA_NAME, PDO::PARAM_STR, 128);
$stmt->bindParam(3, $V_TABNAME, PDO::PARAM_STR, 100);
$stmt->bindParam(4, $out_rc, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 12);
$stmt->bindParam(5, $out_err_message, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 100);
$stmt->bindParam(6, $out_sqlstate, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 6);
$stmt->bindParam(7, $out_sqlcode, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 12);