【问题标题】:PDO::fetchAll not working with MySQL stored procedurePDO::fetchAll 不适用于 MySQL 存储过程
【发布时间】:2018-05-21 00:44:57
【问题描述】:

我试图通过 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 会话后,我发现问题主要是由我处理从存储过程返回的数据的读取方式引起的,我该如何正确执行此操作?

【问题讨论】:

    标签: php mysql stored-procedures pdo


    【解决方案1】:

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

    【讨论】:

    猜你喜欢
    • 2013-09-10
    • 1970-01-01
    • 2012-01-23
    • 2014-09-07
    • 1970-01-01
    • 2011-01-22
    • 2011-01-23
    • 1970-01-01
    相关资源
    最近更新 更多