5

PDOを使用する場合、パラメータを選択してエコーできるはずです。しかし、私が得るのはNULLだけです。Workbenchを使用すると、問題なく表示されます。

なぜそうなのか誰か教えてもらえますか?

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);

編集: これはWindowsの特定の問題である可能性があるとほぼ確信していたので、この例をUNIXサーバーにアップロードして、まったく同じ結果、NULLを取得しました。

4

3 に答える 3

1

ここにバグがありますhttp://bugs.mysql.com/bug.php?id=11638

これを試して

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

    <?php 
    $stmt = $dbh->prepare("CALL SomeStoredProcedure(?, ?)"); 
    $stmt ->execute(array($someInParameter1, $someInParameter2)); 
    ?>
于 2013-01-02T19:59:51.873 に答える
1

への電話に出られなかったようですbindParam()PHPドキュメントの例から:

<?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");
?>

アップデート

MySQLの部分を見逃しました。MySQLは、C API を介したバインド出力パラメーターをサポートしていません。バグレポートでは、SQL レベル変数を使用する必要があると言われています。

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

しかし、これはまさにあなたがしていることであり、機能しません。私は今これを自分で試しています。

于 2013-01-02T18:30:30.673 に答える
0

これを試して

$stmt=Dbh->prepare("CALL testing(@ret)");
$stmt->execute();
$param = $stmt->fetchAll();
var_dump($param);
于 2013-01-02T18:52:35.957 に答える