it-swarm-tr.com

Hata mesajının SQL göstermesini engelleyin

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')

10
doovers

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;
}
6
Tuan Pham Ngoc

Bu davranışı önlemek mümkün görünmediğinden, aşağıdaki çözümü uyguladım. Bir JTablecheck 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;            
}
3
doovers

Ö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.

1
Ivo