Php MySQL调用在执行存储过程后显示错误
我有几个在PHP中通过PDO调用的存储过程。我希望能够通过执行回滚来处理错误,但我仍然希望能够使用PHP检索和处理过程中的最后一个错误。我尝试过使用PDO::errorCode()和PDO::errorInfo(),但这似乎是一个合法的解决方案,我想这是因为我已经在处理存储过程中的错误了 当我通过命令行调用其中一个存储过程,然后调用SHOW ERRORS时,我会得到一个很好的结果集,其中包含错误状态、代码和消息,但如果在执行存储过程后调用PDO中的SHOW ERRORS,则不会得到任何结果。如果在存储过程中调用ShowErrors,则在命令行中显示错误也不会得到任何结果 我会使用GET DIAGNOSTICS,但我正在为其开发的MySQL服务器位于托管cPanel上,我无法控制更新,它是5.5版 我是否有其他选择或者我应该走的其他路线 正如我所说,我有几个存储过程我想处理错误,但我甚至不能让它在一个简单的存储过程上工作:Php MySQL调用在执行存储过程后显示错误,php,mysql,stored-procedures,pdo,Php,Mysql,Stored Procedures,Pdo,我有几个在PHP中通过PDO调用的存储过程。我希望能够通过执行回滚来处理错误,但我仍然希望能够使用PHP检索和处理过程中的最后一个错误。我尝试过使用PDO::errorCode()和PDO::errorInfo(),但这似乎是一个合法的解决方案,我想这是因为我已经在处理存储过程中的错误了 当我通过命令行调用其中一个存储过程,然后调用SHOW ERRORS时,我会得到一个很好的结果集,其中包含错误状态、代码和消息,但如果在执行存储过程后调用PDO中的SHOW ERRORS,则不会得到任何结果。如果
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!我已经在上面发布了一个更新,并显示错误按照您所说的正确工作。我怎么能认为你已经回答了呢?