Masamda, iyi çalışan yinelenen girişleri önlemek için 'col1' üzerinde bir dizin oluşturdum, ancak yinelenen bir giriş eklemeye çalıştıklarında bir kullanıcıya görüntülenen hata iletisi, SQL'i de içerdiğinden bana bir güvenlik sorunu gibi görünüyor tablo öneki.
Hata iletisinde Joomla'nın SQL göstermesini durdurmanın bir yolu var mı?
Global yapılandırmada hata raporlama ayarlarını değiştirmeyi denedim ama anlayabildiğim kadarıyla hiçbir etkisi yok ...
Örnek mesaj:
Hata
Kaydetme işlemi şu hatayla başarısız oldu: 'TestKey' anahtarı için yinelenen 'Test' girişi SQL = INSERT INTO `jml_mycomp_tbl1` (` id`, `col1`,` sipariş``, `durum`,` oluşturulan_by`) DEĞERLER ('0' 'test', '2', '1', '730')
Belki bir try catch komutu kullanabilirsiniz:
try
{
//Your code to run the SQL here
}
catch (Exception $e)
{
$this->setError('The error message you want');
return false;
}
Bu davranışı önlemek mümkün görünmediğinden, aşağıdaki çözümü uyguladım. Bir JTable
check
yöntem geçersiz kılma işlemine yinelenen bir denetim ekleyin:
// 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;
}
Öncelikle yinelenenleri kontrol etmek ve kullanıcıya uygun bir hata (yazdığınız bir hata) döndürmek için eki yapan kodunuzu değiştirmelisiniz ve MySQL tarafından döndürülen gerçek hatayı göstermeye güvenmemelisiniz.