1

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';

これにより、どのテーブルのどの列が不明であるかがわかります。

4

2 に答える 2

0

これは私にとって役立つことがわかりました。「error_log」はphpエラーログに出力されますが、エラーを表示したい方法に置き換えることができます.

} catch (PDOException $ex){
    error_log("MYSQL_ERROR"); //This reminds me what kind of error this actually is
    error_log($ex->getTraceAsString()); // will show the php file line (and parameter 
                                        // values) so you can figure out which
                                        // query/values caused it
    error_log($ex->getMessage());  // will show the actual MYSQL query error 
                                   // e.g. constraint issue
}

psこれは少し遅れていることは知っていますが、誰かを助けることができるかもしれません.

于 2014-09-02T05:33:30.027 に答える
0

pdo 接続の作成中に、エラー モードやエンコーディングなどのオプションを渡します。 PDO システムは、PDO、PDOStatement、PDOException の 3 つのクラスで構成されます。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
于 2013-01-08T17:50:33.253 に答える