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


10

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

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

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

メッセージの例:

エラー

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


1
私はJoomlaを初めて使用しますが、本当のところ、本番環境でのユーザーランドエラーにはSQLを含めないでください。セキュリティのためだけでなく、ユーザーにとっても意味がなく、ユーザーエクスペリエンスが低下するためです。本番環境ではdisplay_errors(PHP設定)をオフにし、そのようなエラーはサーバー側のエラーログにのみ記録する必要があります。
MrWhite 2014年

好奇心旺盛ですが、おそらくこれをすでにチェックしましたが、たまたまデバッグ設定を有効にしていませんか?チェック:グローバル構成>システム設定のデバッグ。チェック:グローバル構成>エラー報告レベル。チェック:プラグイン>デバッグプラグイン何か奇妙なことが起こっているかどうか知りたいだけです。このLearn.theartofjoomla.com/developing-extensions/…
Chad Windnagle

@ChadWindnagleこんにちはチャド、はい私はそれをオフにしようとしましたが、効果はありません...
オーバーオーバー

申し訳ありませんが、更新されたコンテンツを見たことをお知らせください。thnx!
チャドウィンドナグル2014年

@ChadWindnagleいいえ、あなたの編集を見ていませんでした!私はエラー報告を試みましたが、プラグインを無効にするのを忘れました(ヒントをありがとう)ちょうど今試しましたが、それでも効果はありません!
2014年

回答:


6

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

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

提案をありがとうございますが、私がJTable最善の解決策を使用していたのでcheck、私の答えのようにメソッドをオーバーライドすることでした。
2014年

これは良い答えです
David Addoteye 2015年

3

この振る舞いを防ぐことは不可能のようであるので、私は次の解決策を実装しました。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;            
}

1

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


はい、そうする必要があるかもしれませんが、Joomlaがユーザーに表示されるエラーメッセージにSQLを表示できることをまだ心配しています。確かに、これはセキュリティ上の問題ですか?ランダムテーブルプレフィックスの要点は、セキュリティ対策として考えられたのではないでしょうか。多分ベストプラクティスはあなた自身のエラー処理をすることですが、あなたが予見できない状況があるかもしれません...私には少し奇妙に思えます!
2014年

さて、Joomla!SQLエラーメッセージはユーザーに表示されませんが、コードには表示されます。
Ivo 2014年

同意しません。コードにエラーメッセージは表示されませんが、Joomlaコアコードに表示されます。私の意見では、コアコードはセキュリティ上の問題であるため、どのような状況でもテーブルプレフィックスを表示するべきではありません...
doovers

INSERTの代わりにINSERT IGNOREを使用しないのはなぜですか?
Ivo、2014年

良い提案と私はそれを行うことができましたが、私は使用しているのでJTablecheckメソッドをオーバーライドしてそこでの重複をテストする傾向があります。SQLだけでなく、ユーザーにエラーメッセージを表示したいのですが。
2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.