2013-01-08 149 views
1

我打電話一個MySQL使用PDO存儲過程在PHP如何獲取錯誤詳細信息從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'; 

可以告訴我哪個表是未知的列。

+0

你在幾個表中有'name1'列嗎? –

+0

實際列名稱是名稱,但我在存儲過程中故意將其更改爲name1以獲取錯誤。我想檢索'字段列表'中的未知列'Tablename.name1'的詳細錯誤信息;而不是'字段列表'中的未知列'name1'; – neeraj

回答

0

創建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 
+0

現在我得到錯誤「,錯誤:SQLSTATE [42S22]:找不到列:1054在'我的代碼中添加該行後,'字段列表'中的未知列'name1'。我想在錯誤中獲取表名,以便我可以知道哪個表的列是未知的。所以我想獲取錯誤的東西就像「字段列表中的」未知列'Tablename.name1';「 – neeraj

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 
} 

p.s.我知道這有點晚,但也許它可以幫助某人。