私のテーブルでは、うまく機能する重複エントリを防ぐために 'col1'にインデックスを作成しましたが、重複エントリを追加しようとするとユーザーに表示される結果のエラーメッセージは、テーブルの接頭辞。
JoomlaがエラーメッセージにSQLを表示しないようにする方法はありますか?
グローバル設定のエラー報告設定を変更しようとしましたが、私が知る限り効果はありません...
メッセージの例:
エラー
保存が次のエラーで失敗しました:キー 'TestKey'の重複したエントリ 'Test' SQL = INSERT INTO `jml_mycomp_tbl1`(` id`、 `col1`、` order`、 `state`、` created_by`)VALUES( '0' 、「テスト」、「2」、「1」、「730」)
多分あなたはtry catchコマンドを使うことができます:
try
{
//Your code to run the SQL here
}
catch (Exception $e)
{
$this->setError('The error message you want');
return false;
}
この振る舞いを防ぐことは不可能のようであるので、私は次の解決策を実装しました。重複チェックをJTable
check
メソッドオーバーライドに追加します。
// Check for duplicate entry
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('COUNT(*)');
$query->from($this->get('_tbl'));
$query->where($db->quoteName('col1') . ' = ' . $db->quote($this->col1));
$db->setQuery($query);
$result = $db->loadResult();
if ($result)
{
$this->setError(" Duplicate entry for col1 = '" . $this->col1 . "'");
return false;
}
挿入を行うコードを変更して、最初に重複をチェックし、適切なエラー(ユーザーが作成したエラー)をユーザーに返すようにし、MySQLから返される実際のエラーの表示に依存しないようにする必要があります。