Jump to content

Ошибка при попытки использовать поиск на форуме: DOUBLE value is out of range

Featured Replies

Posted
comment_176934

Приветствую форумчан!

У меня достаточно старый (по времени) и большой (по контенту) форум на последней версии IPS.

С недавних пор после очередного обновления при попытке искать на форуме выдается ошибка IPS\Db\Exception: DOUBLE value is out of range. Код ошибки: EX1690. Полный код ошибке в спойлере.
 

Спойлер

SELECT main.*, ((MATCH(index_title) AGAINST ('Поиск' IN BOOLEAN MODE)*5)+(MATCH(index_content,index_title) AGAINST ('Поиск' IN BOOLEAN MODE)))/POWER(( ( UNIX_TIMESTAMP( NOW() ) - ( CASE WHEN index_date_updated <= UNIX_TIMESTAMP( NOW() ) THEN index_date_updated ELSE 0 END )) / 3600 ) + 2,1.5) AS calcscore FROM `core_search_index` AS `main` WHERE ( ( index_class IN('IPS\\core\\Statuses\\Status','IPS\\core\\Statuses\\Reply') ) OR index_class='IPS\forums\Topic\Post' OR ( index_class IN('IPS\\calendar\\Event','IPS\\calendar\\Event\\Comment','IPS\\calendar\\Event\\Review') ) OR ( index_class IN('IPS\\gallery\\Image','IPS\\gallery\\Image\\Comment','IPS\\gallery\\Image\\Review') ) OR ( index_class IN('IPS\\gallery\\Album\\Item','IPS\\gallery\\Album\\Comment','IPS\\gallery\\Album\\Review') ) OR index_class='IPS\cms\Pages\PageItem' ) AND MATCH(index_content,index_title) AGAINST ('Поиск' IN BOOLEAN MODE) AND ( index_permissions = '*' OR ( FIND_IN_SET(4,index_permissions) OR FIND_IN_SET('m1',index_permissions) OR FIND_IN_SET('cm',index_permissions) ) ) ORDER BY calcscore DESC LIMIT 0,25


IPS\Db\Exception: DOUBLE value is out of range in '(match `user_sairam`.`main`.`index_title` against ('Поиск' in boolean mode)) * 5 + (match `user_sairam`.`main`.`index_content`,`user_sairam`.`main`.`index_title` against ('Поиск' in boolean mode))' (1690)


#0 /system/Db/Select.php(446): IPS\Db\_Select->runQuery()#1 [internal function]: IPS\Db\_Select->rewind()
#2 /system/Content/Search/Mysql/Query.php(1302): iterator_to_array()
#3 /applications/core/modules/front/search/search.php(728): IPS\Content\Search\Mysql\_Query->search()
#4 /applications/core/modules/front/search/search.php(109): IPS\core\modules\front\search\_search->_results()
#5 /system/Dispatcher/Controller.php(101): IPS\core\modules\front\search\_search->manage()
#6 /system/Dispatcher/Dispatcher.php(153): IPS\Dispatcher\_Controller->execute()
#7 /index.php(13): IPS\_Dispatcher->run()
#8 {main}

Я сам программист и давно работаю с форумами IPS, но это проблема поставила меня в тупик, никак не могу ее решить.

Может кто подскажет? 

comment_176936

Странная ошибка какая-то, сообщение об ошибке не от первого запроса, там нет таких полей (user_sairam и т.д.). И первый запрос на моей базе без ошибок отрабатывает.

Вообще, если проблема пошла после апгрейда, надо проверять, всё ли сконвертировалось нормально, сравнить структуру таблиц со свежеустановленным пустым форумом. 

 

comment_176944

да действительно проблема с переводом базы, вернул mysql и все норм стало, а что с новой не понятно полный копия той базы было

comment_176948
8 минут назад, Zero108 сказал:

26 МБ - это небольшая база. Базу заливают дампером или непосредственно из файла .sql на сервере по ssh.

понял сейчас попробую)

comment_176951

Я бы рекомендовал вешать дампер на отдельный домен третьего уровня, настраивать ему SSL сертификат. Ошибка 500 говорит о неправильных правах CHMOD, неверном пользователе файлов (например, если заливал файлы дампера по рутом, а пользователь файлов сайта должен быть другой), неправильной версии пхп (попробуй на пхп 7.4). Либо зайди по ssh в sql сервер и загрузи дамп напрямую в базу данных. Также в панеле управления сервером ISPManager (или любой другой) могут быть опции загрузки дампа в базу данных.

========================Залить дамп по ssh===================

mysql ИМЯ_БАЗЫ -uИМЯ_ПОЛЬЗОВАТЕЛЯ -pПАРОЛЬ < dump.sql

или

mysql -uИМЯ_ПОЛЬЗОВАТЕЛЯ -pПАРОЛЬ
и далее в окне на приглашение mysql>
use ИМЯБАЗЫДАННЫХ;
\. /var/lib/phpMyAdmin/upload/dump.sql

(где /var/lib/phpMyAdmin/upload/ - полный серверный путь к файлу дампа).

 

Edited by Zero108

comment_176954
1 час назад, Zero108 сказал:

Я бы рекомендовал вешать дампер на отдельный домен третьего уровня, настраивать ему SSL сертификат. Ошибка 500 говорит о неправильных правах CHMOD, неверном пользователе файлов (например, если заливал файлы дампера по рутом, а пользователь файлов сайта должен быть другой), неправильной версии пхп (попробуй на пхп 7.4). Либо зайди по ssh в sql сервер и загрузи дамп напрямую в базу данных. Также в панеле управления сервером ISPManager (или любой другой) могут быть опции загрузки дампа в базу данных.

========================Залить дамп по ssh===================

mysql ИМЯ_БАЗЫ -uИМЯ_ПОЛЬЗОВАТЕЛЯ -pПАРОЛЬ < dump.sql

или

mysql -uИМЯ_ПОЛЬЗОВАТЕЛЯ -pПАРОЛЬ
и далее в окне на приглашение mysql>
use ИМЯБАЗЫДАННЫХ;
\. /var/lib/phpMyAdmin/upload/dump.sql

(где /var/lib/phpMyAdmin/upload/ - полный серверный путь к файлу дампа).

 

выдает ошибку 'имя база'@'localhost' у меня не localhost, mariadb присваивает другой имя сервера

  • Author
comment_177033
В 26.01.2022 в 01:00, Desti сказал:

user_sairam

Это user базы данных сайта. Ошибка действительно странная, искал упоминания на stackoverflow и на форуме разработчиков IPS. Нигде нет никакой информации. На stackoverflow были подобные ошибки, связанные с переполнением максимального значения переменной типа DOUBLE. Но я не понял, какая именно колонка базы данных выдает эту ошибку. И индексы autoincrement тоже не переполнены. Пробовал запрос напрямую в базу отправить - исполнился без ошибок.

В 26.01.2022 в 08:32, Respected сказал:

Я так понимаю проблема решилась.

В общем, проблема вроде как решилась, но это не точно. Через админ панель сбросил поисковый индекс в разделе Поиск и перестроил его заново. Пока ошибка не появлялась. Надеюсь, что все-таки проблема была из-за кривого апгрейда и перестройки индекса.

Спасибо всем за советы! Даже моральная поддержка дает уверенности, что все можно решить!

comment_177041
1 час назад, ram108 сказал:

Но я не понял, какая именно колонка базы данных выдает эту ошибку. И индексы autoincrement тоже не переполнены.

Если ошибка связана с этим запросом, то тут не колонка базы, а вычисление - вся эта фигня POWER с возведение в степень дробного числа. В результате может получится число с огромной дробной частью, которое великовато для DOUBLE в коде. Но это только предположение, колонок DOUBLE  в этой таблице нет.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.