PHP PDO kann nicht bekommen OUT-parameter Wert
Ich habe gerade angefangen mit PHP PDO mit MySQL stored procedures und ich habe ein problem mit how to get OUT-Parameter von der Prozedur-Aufruf. Ich sah viele ähnliche stackoverflow Themen, aber leider konnte ich nicht einen Weg finden, zu beheben mein Problem 😐
Hier sind die details:
Dauert die Prozedur 1 input-parameter und hat 2 obligatorische output-Parametern und Ergebnis-status in Ihnen.
Dies ist, wie ich es nennen:
$input = 5;
$mydb = new PDO("mysql:host=localhost;dbname=mydb", "user", "pass");
$proc = $mydb->prepare("CALL proc_name($input, @o_code, @o_message)");
$proc->execute();
Gibt die Prozedur INT in der @o_code parameter und STRING in der @o_message parameter.
Wenn es heißt von CLI, und nach dem Aufruf Schreibe ich in der CLI
select @o_code, @o_message;
alles OK ist, ist, dass ich in der Lage bin zu sehen, die Werte, die bei diesen OUT-Parameter.
Aber ich kann es nicht tun, aus PHP - code- aus irgendeinem Grund bekomme ich immer FALSCHE Ergebnisse. Das Verfahren tun, es ist Arbeit richtig, aber ich kann einfach nicht bekommen Ihre Ergebnisse.
Ich habe versucht, die folgenden Methoden, um die Werte, direkt nachdem ich den Anruf oben beschrieben:
$output = $proc->fetch(PDO::FETCH_ASSOC); //also with PDO:FETCH_OBJ
$output = $mydb->query("select @o_code, @o_message");
$output = $mydb->query("select @o_code, @o_message")->fetch();
$output = $mydb->query("select @o_code, @o_message")->fetchColumn();
$output = $mydb->query("select @o_code, @o_message")->fetchAll();
aber keines dieser Rückgabe einem Ergebnis Verschieden von NULL oder FALSE. Ich habe auch versucht mit bindParam, konnte aber immer noch nicht damit es funktioniert.
Danke für jede Hilfe zu diesem Thema und guten Tag!
- - - - - - EDIT - - - - - -
Hier ist der code, den ich versuchte, mit bindParam, die immer noch nicht funktioniert:
$input = 5;
$proc = $mydb->prepare("CALL proc_name(?, ?, ?)");
$proc->bindParam(1, $input, PDO::PARAM_INT);
$proc->bindParam(2, $code, PDO::PARAM_INT);
$proc->bindParam(3, $message, PDO::PARAM_STR);
$proc->execute();
var_dump($code, $message); //NULL, NULL
Die Frage, die Sie zeigen sind ist ein anderes problem und es löst nicht das problem, die Frage hier gepostet. Sie können die akzeptierte Antwort unten, um zu sehen, dass das problem der "closeCursor()" aufgerufen werden soll, für die Dinge, um richtig zu arbeiten. Deine Antwort in der anderen Frage hat, die Zeile code, die, so meine Vermutung ist, dass es nicht funktioniert.
Die Antwort ist über die erste Ausgabe param Wert! Die closeCursor () - Aufruf nicht beteiligt. Ich aktualisierte die Antwort zu klären, besser btw
InformationsquelleAutor luben | 2011-06-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem war, dass die erste Abfrage, die den Aufruf der gespeicherten Prozedur ist nicht als fertig und geschlossen, und wird PDO nicht ausführen einer anderen Abfrage, bis die Vorherige Abfrage ist fertig.
War die Lösung, fügen Sie
$proc->closeCursor();
Die ganze Arbeit Probe:
InformationsquelleAutor luben