php - stored - PDO und MySQL gespeicherte Prozedur. Nicht zurück param




prepared statements php (2)

Es scheint, dass Sie den Aufruf von bindParam() verpassen. Aus den PHP-Doc-Beispielen :

<?php
/* Call a stored procedure with an INOUT parameter */
$colour = 'red';
$sth = $dbh->prepare('CALL puree_fruit(?)');
$sth->bindParam(1, $colour, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
$sth->execute();
print("After pureeing fruit, the colour is: $colour");
?>

AKTUALISIEREN

Ich habe den MySQL-Teil verpasst. MySQL unterstützt keine Bindung von Ausgabeparametern über seine C-API. Im Fehlerbericht wird gesagt, dass Sie SQL-Level-Variablen verwenden müssen:

$stmt = $db->prepare("CALL sp_returns_string(@a)");
$stmt->execute();
print_r($db->query("SELECT @a")->fetchAll());

aber das ist genau das, was Sie tun, und es funktioniert nicht. Ich probiere das gerade selbst aus.

Wenn ich PDO verwende, sollte ich in der Lage sein, den Parameter auszuwählen und zu echotieren. Alles was ich bekomme ist jedoch NULL. Wenn ich Workbench benutze, kann ich es gut sehen.

Kann mir jemand sagen, warum das so ist?

CREATE PROCEDURE testing(OUT ret int)
BEGIN SET ret=12; END;

// On workbench returns '12' - Correct       
call testing(@ret);
select @ret;

// PHP/PDO returns NULL
$stmt=Db()->prepare("CALL testing(@ret)");
$stmt->execute();
$param = Db()->query("SELECT @ret")->fetch(PDO::FETCH_ASSOC);
var_dump($param);

EDIT: Ich war gerade davon überzeugt, dass dies ein spezifisches Problem mit Windows gewesen sein könnte, also habe ich dieses Beispiel auf meinen UNIX-Server hochgeladen und bekomme genau das gleiche Ergebnis, NULL.


Ich sehe hier einen Fehler http://bugs.mysql.com/bug.php?id=11638 .

Versuche dies

   insert "SELECT @someOutParameter" in your stored procedure and then use: 

    <?php 
    $stmt = $dbh->prepare("CALL SomeStoredProcedure(?, ?)"); 
    $stmt ->execute(array($someInParameter1, $someInParameter2)); 
    ?>






prepared-statement