php - 如何从 MySQL 存储过程中获取错误详细信息

标签 php mysql stored-procedures pdo

我在 PHP 中使用 PDO 调用 mysql 存储过程

try {

    $conn = new PDO("mysql:host=$host_db; dbname=$name_db", $user_db, $pass_db);    
    $stmt = $conn->prepare('CALL sp_user(?,?,@user_id,@product_id)');    
    $stmt->execute(array("user2", "product2"));    
    $stmt->setFetchMode(PDO::FETCH_COLUMN, 0);
    $errors = $stmt->errorInfo();
    if($errors){
        echo $errors[2];
    }else{
        /*Do rest*/
    }

}catch(PDOException $e) {
  echo "Error : ".$e->getMessage();
}

返回以下错误,因为插入查询中的字段名称错误

Unknown column 'name1' in 'field list'

所以我想知道这是否有可能获得详细的错误信息,例如:-

Unknown column 'Tablename.name1' in the 'field list';

这可以告诉我哪个表的哪一列是未知的。

最佳答案

在创建 pdo 连接时,传递错误模式和编码等选项: PDO 系统由 3 个类组成:PDO、PDOStatement 和 PDOException。 PDOException 类是错误处理所需要的。

这是一个例子:

try
{
    // use the appropriate values …
    $pdo = new PDO($dsn, $login, $password);
    // any occurring errors wil be thrown as PDOException
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $ps = $pdo->prepare("SELECT `name` FROM `fruits` WHERE `type` = ?");
    $ps->bindValue(1, $_GET['type']);
    $ps->execute();
    $ps->setFetchMode(PDO::FETCH_COLUMN, 0);
    $text = "";
    foreach ($ps as $row)
    {
         $text .= $row . "<br>";
    }
    // a function or method would use a return instead
    echo $text;
} catch (Exception $e) {
    // apologise
    echo '<p class="error">Oops, we have encountered a problem, but we will deal with it. Promised.</p>';
    // notify admin
    send_error_mail($e->getMessage());
}
// any code that follows here will be executed

关于php - 如何从 MySQL 存储过程中获取错误详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14213327/

相关文章:

mysql - 需要解决 mariadb 中复杂查询矩阵输出的问题

php - 当我通过 API 从 Laravel 中的数据库获取用户数据时出现错误

php - 查询过去 X 天数

mysql - 修复 MacPorts MySQL 的配置问题

mysql - 将 XML 数据存储在 MySQL 数据库中的最佳方式,具有一些特定要求

php - mysql连接表

mysql - 在mysql中对与字母数值混合的数值进行排序

php - 使用 php 更新 mysql 数据库时出现额外空格

php - 如何根据 PHP 中输​​入的天数(例如 230、20 或 360 或任何天数)获取过去的日期(例如 2013-06-02)?

java - JPA 2.1 - @NamedStoredProcedureQuery - ParameterMode.IN - null 值给出错误