it-swarm-vi.com

Ngăn thông báo lỗi hiển thị SQL

Trong bảng của tôi, tôi đã tạo một chỉ mục trên 'col1' để ngăn các mục trùng lặp hoạt động tốt nhưng thông báo lỗi kết quả được hiển thị cho người dùng khi họ cố gắng thêm một mục trùng lặp dường như là một mối quan tâm bảo mật vì nó hiển thị SQL bao gồm tiền tố bảng.

Có cách nào để ngăn Joomla hiển thị SQL trong thông báo lỗi không?

Tôi đã thử thay đổi cài đặt báo cáo lỗi trong cấu hình chung nhưng nó không có tác dụng như tôi có thể nói ...

Thông báo ví dụ:

Lỗi

Lưu không thành công với lỗi sau: Sao chép mục 'Kiểm tra' cho khóa 'TestKey' SQL = INSERT INTO `jml_mycomp_tbl1` (` id`, `col1`,` order`, `state`,` created_by`) VALUES ('0' , 'Kiểm tra', '2', '1', '730')

10
doovers

Có lẽ bạn có thể sử dụng lệnh 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

Vì dường như không thể ngăn chặn hành vi này, tôi đã thực hiện giải pháp sau đây. Thêm kiểm tra trùng lặp vào ghi đè phương thức 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

Bạn nên thay đổi mã của mình để chèn lần đầu tiên kiểm tra trùng lặp và trả lại lỗi thích hợp (lỗi mà bạn viết) cho người dùng và không dựa vào việc hiển thị lỗi thực tế được trả về bởi MySQL.

1
Ivo