The documentation says this about the length parameter for bindParam: "To indicate that a parameter is an OUT parameter from a stored procedure, you must explicitly set the length. "For db2, I found that setting the length for the "INPUT_OUTPUT" parameters causes a problem for varchar parameters that are input parameters. The problem I found is that the stored procedure was called, but varchar input parameters were set to null inside my stored procedure and as a result, the stored procedure could not work properly. Here is the signature for my stored procedure: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)Here is the php code that works:$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);Here is the php code that does not work:$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);