使用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。
答案 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);