PDO和MySQL存储过程。不退还参数

时间:2013-01-02 18:02:49

标签: php mysql stored-procedures pdo prepared-statement

使用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。

3 个答案:

答案 0 :(得分:1)

好像你错过了对bindParam()的号召。来自the PHP doc examples

<?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 doesn't support通过其C API绑定输出参数。在错误报告中,它说你必须使用SQL级别变量:

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

但这正是你所做的,它不起作用。我现在正在尝试这个。

答案 1 :(得分: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)); 
    ?>

答案 2 :(得分:0)

试试这个

$stmt=Dbh->prepare("CALL testing(@ret)");
$stmt->execute();
$param = $stmt->fetchAll();
var_dump($param);