Hallo David,
auch ich habe das gleiche Problem. Die Ausführung funktioniert, aber ich bekomme keinen Parameter von meinem aufgerufenem Programm auf der AS/400 zurück.
Hier mein Testprogramm:

try {
$db = new PDO('odbc:AS400', conn_user, conn_password);
} catch (Exception $e) {
echo "Fehler beim Connect :" . $e->getMessage();
}

$parm1 = "'A'";

$stmt = $db->prepare("CALL Bibliothek.Testprogramm($parm1)");
$stmt->bindParam(1, $parm1, PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT, 4000);

if(isset($_POST['mail_abschicken']) && $_POST['mail_abschicken'] == 'Befehl auf der AS/400 aufrufen') {

$stmt->execute();

echo '
';
echo 'Parm1 :' . $parm1;
echo '
';
}

Der Parameter $parm1 bleibt auf A, obwohl das Programm auf der AS/400 ein B zurückgeben soll.

Als ODBC-Treiber verwende ich den normalen iSeries Access ODBC Treiber.

Du schriebst, dass ihr erst etwas einspielen musstet. Was war das denn?
Bei mir ist die ganze PDO-Geschichte offenbar in meiner PHP-Installation schon dabei (PHP-Vers. 5.3.0).

Auch ich arbeite mich in die mit PHP und As/400 Zugriffe ein.

Danke für Deine Antwort.