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

您似乎错过了对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 回答
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 回答
0

试试这个

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