Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL调用在执行存储过程后显示错误_Php_Mysql_Stored Procedures_Pdo - Fatal编程技术网

Php MySQL调用在执行存储过程后显示错误

Php MySQL调用在执行存储过程后显示错误,php,mysql,stored-procedures,pdo,Php,Mysql,Stored Procedures,Pdo,我有几个在PHP中通过PDO调用的存储过程。我希望能够通过执行回滚来处理错误,但我仍然希望能够使用PHP检索和处理过程中的最后一个错误。我尝试过使用PDO::errorCode()和PDO::errorInfo(),但这似乎是一个合法的解决方案,我想这是因为我已经在处理存储过程中的错误了 当我通过命令行调用其中一个存储过程,然后调用SHOW ERRORS时,我会得到一个很好的结果集,其中包含错误状态、代码和消息,但如果在执行存储过程后调用PDO中的SHOW ERRORS,则不会得到任何结果。如果

我有几个在PHP中通过PDO调用的存储过程。我希望能够通过执行回滚来处理错误,但我仍然希望能够使用PHP检索和处理过程中的最后一个错误。我尝试过使用PDO::errorCode()和PDO::errorInfo(),但这似乎是一个合法的解决方案,我想这是因为我已经在处理存储过程中的错误了

当我通过命令行调用其中一个存储过程,然后调用SHOW ERRORS时,我会得到一个很好的结果集,其中包含错误状态、代码和消息,但如果在执行存储过程后调用PDO中的SHOW ERRORS,则不会得到任何结果。如果在存储过程中调用ShowErrors,则在命令行中显示错误也不会得到任何结果

我会使用GET DIAGNOSTICS,但我正在为其开发的MySQL服务器位于托管cPanel上,我无法控制更新,它是5.5版

我是否有其他选择或者我应该走的其他路线

正如我所说,我有几个存储过程我想处理错误,但我甚至不能让它在一个简单的存储过程上工作:

BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
    ROLLBACK;
END;

SELECT *
FROM bunnies;
END
更新:我的PHP代码在一个对象中,所以我复制并简化了代码,以便按照Barmar的请求发布。当我尝试简化代码时,我发现在函数准备和执行后准备和执行时,SHOW ERRORS确实适用于PDO

我的对象有点复杂(我在了解PHP OOP之前写过它),所以我也简化了它,现在它可以工作了!我认为在两次调用之间连接被关闭,现在代码更简单了,我在调用SHOW ERRORS时没有问题

以下是我用来测试的简化PHP代码,以防任何人在使用时遇到问题:

    $host = '***';
    $user = '***';
    $pass = '***';
    $schema = '***';

    $connection = new PDO('mysql:host=' . $host . ';dbname=' . $schema . ';', $user, $pass);
    $statement = $connection->prepare('CALL test()');
    $statement->execute();
    $statement = $connection->prepare('SHOW ERRORS');
    $statement->execute();
    echo var_dump($statement->fetchAll());

    $statement = null;
    $statement = null;
    $connection = null;

确保使用相同的PDO连接对象来执行原始查询和检索错误。每个连接都有自己的错误状态。

我认为它应该与PDO一起工作——显示您的代码。我能想到的唯一一件事是,您正在启动过程调用和
显示错误
之间的新连接,因此您正在丢失状态。谢谢Barmar!我已经在上面发布了一个更新,并显示错误按照您所说的正确工作。我怎么能认为你已经回答了呢?