web-dev-qa-db-ja.com

エラーメッセージにSQLが表示されないようにする

私のテーブルでは、うまく機能する重複エントリを防ぐために 'col1'にインデックスを作成しましたが、重複エントリを追加しようとするとユーザーに表示される結果のエラーメッセージは、テーブルの接頭辞。

JoomlaがエラーメッセージにSQLを表示しないようにする方法はありますか?

グローバル設定のエラー報告設定を変更しようとしましたが、私が知る限り効果はありません...

メッセージの例:

エラー

保存が次のエラーで失敗しました:キー 'TestKey'の重複したエントリ 'Test' SQL = INSERT INTO `jml_mycomp_tbl1`(` id`、 `col1`、` order`、 `state`、` created_by`)VALUES( '0' 、「テスト」、「2」、「1」、「730」)

10
doovers

多分あなたはtry catchコマンドを使うことができます:

try
{
//Your code to run the SQL here 
}
catch (Exception $e)
{
$this->setError('The error message you want');
return false;
}
6
Tuan Pham Ngoc

この振る舞いを防ぐことは不可能のようであるので、私は次の解決策を実装しました。重複チェックをJTablecheckメソッドオーバーライドに追加します。

// 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;            
}
3
doovers

挿入を行うコードを変更して、最初に重複をチェックし、適切なエラー(ユーザーが作成したエラー)をユーザーに返すようにし、MySQLから返される実際のエラーの表示に依存しないようにする必要があります。

1
Ivo