2016-04-22 1 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、学校のe-サービスのユーザー名、電話番号、社会保障番号、電子メールなどは – 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") 
関連する問題