Перейти к содержимому
Русский язык для Invision Community 5

Проверка на ошибку в buildAndFetch

Существует подобный код:

 

$result = $this->DB->buildAndFetch( ... );

// тут должна быть проверка на ошибку...

if ( $this->DB->getTotalRows() > 0 )
{
// update...
}
else
{
// insert...
}

 

Иногда (очень редко) когда происходит атака на форум или что то подобное, в запросе buildAndFetch может возникнуть ошибка, и в следствии чего код ниже выполняется не правильно, то есть вместо обновления записи (update) он добавляет новую (insert).

 

Как мне сделать проверку на ошибку, чтобы в случае её возникновения не выполнять код?

Рекомендованные сообщения

Что за ошибка?

Если будет sql-ошибка, то код будет остановлен.

  • Автор

В самом запросе ошибок нет.

 

Я не понимаю почему getTotalRows возвращает результат 0, и в следствии чего создается дублирующая запись?

 

Полный код: https://pastebin.com/EdrwrWwe

Я бы проверял данные в массиве

if ( !in_array( $this->memberData['member_group_id'], explode( ',', $this->settings['tviewedby_grupos_protegidos'] ) ) )
{
$pesquisa = $this->DB->buildAndFetch( array(
                              'select' => 'id, member_id, tid, vezes',
                              'from'   => 'topic_viewedby',
                              'where'  => "member_id=".$this->memberData['member_id']." and tid=". (int) $this->request['t'] ) );

   if ( $pesquisa['id'] )
   {
       $vezes = $pesquisa['vezes'];
       $this->DB->update( 'topic_viewedby', array( 'dateview' => time(), 'vezes' => $vezes+1), 'id='.$pesquisa['id']  );
   }
   else
   {
       $this->DB->insert( 'topic_viewedby', array( 'tid' => (int) $this->request['t'], 'member_id' => $this->memberData['member_id'], 'dateview' => time(), 'vezes' => 1 ) );
   }
}

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.