2016-04-22 42 views
3

如果發生MySQL錯誤(例如重複輸入),我想獲取導致問題的字段的名稱。我做這樣的:如何獲取MySQL錯誤參數?

$err = $mysqli->error; 
$errno = $mysqli->errno; 
... 
if ($errno == 1062) 
{ 
    $begin = strpos($err, "' for key '") + 11; 
    $end = strlen($err) - 1; 
    $arg = substr($err, $begin, $end - $begin); 
} 

$arg商店名稱。這並不是一種超級可靠的方法,但據我所知,不能保證從版本到版本以及數據庫到數據庫的錯誤格式保持不變。

是否有一個更直接的方法來獲得該字段的名稱?

+0

這是一個問題。我會使用存儲整個錯誤消息或通過正則表達式獲取值。您需要知道如何通過錯誤代碼解析錯誤值。如果錯誤可以被新版本的sql引擎改變,這是一個問題。如果你需要,我會使數組errorCode =>正則表達式如何獲得一定的價值。 – daremachine

+0

你爲什麼要這樣做?在一個設計合理的應用程序中,不需要名稱。在同一張桌子上不應該有很多獨特的索引。 –

+0

@YourCommonSense好吧,我可以說我有一張學生表,每個學生都有他們獨特的學生ID,學校電子服務的用戶名,電話號碼,社會安全號碼和電子郵件,例如 – user81993

回答

0

您將按如下方式執行嵌套的CASE語句。結果將返回帶有重複條目的字段。如果超過1個重複條目,它會對每個條目做出響應。

SELECT PD.column_name1, PD.column_name2, PD.column_name3 FROM table_name WHERE PD.column_name1 = value1, PD.column_name2 = value2, PD.column_name3 = value3 AS PD (SELECT CASE 
     WHEN PD.column_name1 = value1 THEN "column_name1" 
     WHEN PD.column_name2 = value2 THEN "column_name2" 
     WHEN PD.column_name3 = value3 THEN "column_name3")