PDO :: fetchAll不能使用MySQL存储过程

时间:2017-12-07 01:16:19

标签: php mysql stored-procedures pdo

我试图通过PHP调用存储过程从数据库返回一行。但是,当我这样做时,我通常会得到“一般错误”。

Fatal error:  Uncaught PDOException: SQLSTATE[HY000]: General error in C:\xampp\htdocs\Skilaverkefni 4\Courses\read.php:11
Stack trace:
#0 C:\xampp\htdocs\Skilaverkefni 4\Courses\read.php(11): PDOStatement->fetchAll(2)
#1 C:\xampp\htdocs\Skilaverkefni 4\index.php(13): ReadCourse('FOR3L3U')
#2 {main}
  thrown in C:\xampp\htdocs\Skilaverkefni 4\Courses\read.php on line 11

以下是代码:

<?php 

    function ReadCourse($courseID)
    {

        require "dbCon.php";
        $SQL = "SET @p0='" . $courseID . "'; CALL ReadCourse(@p0);";
        echo "$SQL";
        $logon = $pdo->prepare($SQL);
        $logon->execute();
        $records = $logon->fetchAll(PDO::FETCH_ASSOC);

        print_r($records);

    }



?>

经过长时间的Google会话后,我发现问题主要是由于我处理读取存储过程返回的数据的方式,我该怎么做?

1 个答案:

答案 0 :(得分:0)

PDO的全部意义在于无法运行您选择以字符串形式传递的任何旧数据库查询。

来自documentation

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