Thank you Sandra, for reporting this issue.
The original line in the «mod/hotpot/locallib.php» script is this:
- WHERE hotpotid=? AND userid=? AND attempt<? AND status=?
… but your server reports the line as being this:
- WHERE hotpotid=? AND userid=? AND attempt<?php AND status=?
Notice that «php» has been added. Something on your server is replacing «<?» with «<?php».
For your information, this original line has been like that since Sept 2013, so I suspect that during the recent upgrade, not only was the HotPot module upgraded, but so was PHP, or at least some of the PHP settings were changed. Perhaps you now have PHP’s
«short_open_tag On», where it was set to «Off» before? Or perhaps there is some other filter at work that was not active before?
Anyway, I have added a space between the «<» and the «?», so I hope this fixes the issue on your server. Please update your HotPot module and let me know if this fix works for you.
Please be aware that the «<?» also occurs in the following scripts in Moodle core, so other plugins are also probably causing errors on your server:
- lib/evalmath/evalmath.class.php
- <?
- mod/chat/lib.php
- $query = «(version<>’basic’ AND lastping<?) OR (version=’basic’ AND lastping<?)»;
- question/format/webct/format.php
- «‘<[/!]*?[^<?>]*?>’si», // Remove HTML tags.
- question/type/calculated/questiontype.php
- foreach ([‘//’, ‘/*’, ‘#’, ‘<?’, ‘?>’] as $commentstart) {
$safeoperatorchar = ‘-+/*%>:^~<?=&|!’; /* */
Best regards,
Gordon
I am trying to use the external database log plugin in Moodle to copy over the standard log table into an external database for easier access to do some analytics work.
I activated the external db log and added all correct settings on the settings page. I clicked «test connection» and it connected successfully and returned the table column headers successfully. But if I click around and make some logs, they are visible in the standard log store but my external db table is still empty.
So I tried connecting to my external db locally in TablePlus using identical credentials as I put in the external db log store settings, and I could connect and write successfully.
Next I went into the live logs and picked standard logs, and they showed up just fine. Then I clicked on external db logs (nothing inside except for 2 manually entered rows of data), and got this error:
URL: https://ohsu.mrooms3.net/
Debug info: ERROR: syntax error at or near "{" LINE 1: SELECT COUNT('x') FROM {OpenLMSLog} WHERE courseid = $1 AND ... ^ SELECT COUNT('x') FROM {OpenLMSLog} WHERE courseid = $1 AND timecreated > $2 AND anonymous = $3 [array ( 0 => '1', 1 => 1604556625, 2 => 0, )] Error code: dmlreadexception
Stack trace:
* line 486 of /lib/dml/moodle_database.php: dml_read_exception thrown
* line 329 of /lib/dml/pgsql_native_moodle_database.php: call to moodle_database->query_end()
* line 920 of /lib/dml/pgsql_native_moodle_database.php: call to pgsql_native_moodle_database->query_end()
* line 1624 of /lib/dml/moodle_database.php: call to pgsql_native_moodle_database->get_records_sql()
* line 1697 of /lib/dml/moodle_database.php: call to moodle_database->get_record_sql()
* line 1912 of /lib/dml/moodle_database.php: call to moodle_database->get_field_sql()
* line 1895 of /lib/dml/moodle_database.php: call to moodle_database->count_records_sql()
* line 262 of /admin/tool/log/store/database/classes/log/store.php: call to moodle_database->count_records_select()
* line 329 of /report/loglive/classes/table_log.php: call to logstore_databaselogstore->get_events_select_count()
* line 48 of /report/loglive/classes/table_log_ajax.php: call to report_loglive_table_log->query_db()
* line 59 of /report/loglive/classes/renderer_ajax.php: call to report_loglive_table_log_ajax->out()
* line 462 of /lib/outputrenderers.php: call to report_loglive_renderer_ajax->render_report_loglive()
* line 53 of /report/loglive/loglive_ajax.php: call to plugin_renderer_base->render()
This is the only error message I get even after turning on debugging in the developer settings. My goal is to successfully configure an external db to track logs, but due to a lack of error messages when testing the connection it is hard to debug.
Environment configuration: Open LMS 3.8 MP2 (Build: 20201008)
The external db is a postgres db so we set it on the postgres driver.
Hello,
since I have Moodle Version 3.5+ (Build: 20180621) with H5P mod_hvp Version 1.17 (2019031200) we can’t save any H5P element.
On trying to save an element, we get this error message:
Debug info: SQLState: 42000<br>
Error Code: 102<br>
Message: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Falsche Syntax in der Nähe von «LIMIT».<br>
SELECT id
FROM mdl_hvp_libraries
WHERE machine_name = N’H5P.CoursePresentation’
AND (major_version > ‘1’
OR (major_version = ‘1’ AND minor_version > ’20’))
LIMIT 1
[array (
0 => ‘H5P.CoursePresentation’,
1 => ‘1’,
2 => ‘1’,
3 => ’20’,
)]
Error code: dmlreadexception
Stack trace:
line 486 of libdmlmoodle_database.php: dml_read_exception thrown
line 324 of libdmlsqlsrv_native_moodle_database.php: call to moodle_database->query_end()
line 431 of libdmlsqlsrv_native_moodle_database.php: call to sqlsrv_native_moodle_database->query_end()
line 896 of libdmlsqlsrv_native_moodle_database.php: call to sqlsrv_native_moodle_database->do_query()
line 972 of libdmlsqlsrv_native_moodle_database.php: call to sqlsrv_native_moodle_database->get_recordset_sql()
line 1571 of libdmlmoodle_database.php: call to sqlsrv_native_moodle_database->get_records_sql()
line 1644 of libdmlmoodle_database.php: call to moodle_database->get_record_sql()
line 1611 of modhvpclassesframework.php: call to moodle_database->get_field_sql()
line 291 of modhvpmod_form.php: call to mod_hvpframework->libraryHasUpgrade()
line 332 of modhvpmod_form.php: call to mod_hvp_mod_form->validate_created()
line 590 of libformslib.php: call to mod_hvp_mod_form->validation()
line 526 of libformslib.php: call to moodleform->validate_defined_fields()
line 636 of libformslib.php: call to moodleform->is_validated()
line 1096 of coursemoodleform_mod.php: call to moodleform->get_data()
line 390 of modhvpmod_form.php: call to moodleform_mod->get_data()
line 150 of coursemodedit.php: call to mod_hvp_mod_form->get_data()
Is it possible to fix?
Thank you an best regards.
Marcus
Я пытаюсь использовать плагин журнала внешней базы данных в Moodle, чтобы скопировать стандартную таблицу журнала во внешнюю базу данных, чтобы упростить доступ для выполнения некоторых аналитических задач.
Я активировал внешний журнал базы данных и добавил все правильные настройки на странице настроек. Я щелкнул «тестовое соединение», он успешно подключился и успешно вернул заголовки столбцов таблицы. Но если я щелкну и сделаю несколько журналов, они будут видны в стандартном хранилище журналов, но моя внешняя таблица db все еще пуста.
Поэтому я попытался подключиться к своему внешнему БД локально в TablePlus, используя те же учетные данные, что и в настройках внешнего хранилища журналов БД, и я смог успешно подключиться и записать.
Затем я вошел в живые журналы и выбрал стандартные журналы, и они отлично проявились. Затем я щелкнул внешние журналы db (ничего внутри, кроме двух введенных вручную строк данных) и получил эту ошибку:
URL: https://ohsu.mrooms3.net/
Debug info: ERROR: syntax error at or near "{" LINE 1: SELECT COUNT('x') FROM {OpenLMSLog} WHERE courseid = $1 AND ... ^ SELECT COUNT('x') FROM {OpenLMSLog} WHERE courseid = $1 AND timecreated > $2 AND anonymous = $3 [array ( 0 => '1', 1 => 1604556625, 2 => 0, )] Error code: dmlreadexception
Stack trace:
* line 486 of /lib/dml/moodle_database.php: dml_read_exception thrown
* line 329 of /lib/dml/pgsql_native_moodle_database.php: call to moodle_database->query_end()
* line 920 of /lib/dml/pgsql_native_moodle_database.php: call to pgsql_native_moodle_database->query_end()
* line 1624 of /lib/dml/moodle_database.php: call to pgsql_native_moodle_database->get_records_sql()
* line 1697 of /lib/dml/moodle_database.php: call to moodle_database->get_record_sql()
* line 1912 of /lib/dml/moodle_database.php: call to moodle_database->get_field_sql()
* line 1895 of /lib/dml/moodle_database.php: call to moodle_database->count_records_sql()
* line 262 of /admin/tool/log/store/database/classes/log/store.php: call to moodle_database->count_records_select()
* line 329 of /report/loglive/classes/table_log.php: call to logstore_databaselogstore->get_events_select_count()
* line 48 of /report/loglive/classes/table_log_ajax.php: call to report_loglive_table_log->query_db()
* line 59 of /report/loglive/classes/renderer_ajax.php: call to report_loglive_table_log_ajax->out()
* line 462 of /lib/outputrenderers.php: call to report_loglive_renderer_ajax->render_report_loglive()
* line 53 of /report/loglive/loglive_ajax.php: call to plugin_renderer_base->render()
Это единственное сообщение об ошибке, которое я получаю даже после включения отладки в настройках разработчика. Моя цель — успешно настроить внешнюю базу данных для отслеживания журналов, но из-за отсутствия сообщений об ошибках при тестировании соединения трудно отлаживать.
Конфигурация среды: Откройте LMS 3.8 MP2 (сборка: 20201008) Внешняя база данных — это база данных postgres, поэтому мы установили ее в драйвере postgres.
1 ответ
Лучший ответ
Похоже, что SQL, используемый плагином внешнего хранилища журналов БД, несовместим с Postgres, несмотря на использование драйвера Postgres в настройках плагина внешнего хранилища журналов БД, о чем свидетельствует ошибка ‘{‘ в SQL, показанном в вопросе. См. документацию здесь.
Чтобы исправить это, мы использовали MariaDB вместо Postgres, и в итоге мы получили работу внешнего хранилища журналов db.
Еще одно замечание: вы должны точно сопоставить свои столбцы и типы данных со схемой в Moodle db, а затем вы должны установить столбец ID вашей таблицы db на автоматическое увеличение. Если вы не знаете, как выглядит схема, в разделе «Отчеты» есть интерфейс Admin SQL, который позволяет запускать SQL. Сбоку есть кнопка для просмотра схемы любой таблицы в базе данных.
0
bodily11
12 Ноя 2020 в 00:02
#1 05.06.2020 12:41:34
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Исправить базу.
Добрый день. Подскажите как можно исправить базу moodle 3.8.2+.
unsupported_db_table_row_format
если этот тест не пройден, это указывает на потенциальную проблему
В вашей базе данных есть таблицы, использующие антилопу в качестве формата файла. Рекомендуется преобразовать таблицы в формат файла Barracuda. Смотрите документацию Администрирование через командную строку для подробностей инструмента для преобразования таблиц InnoDB в Barracuda.
Пробовал вводить.
php admin / cli / mysql_compressed_rows.php —list
php admin / cli / mysql_compressed_rows.php —fix
Команды не отрабатывают, может как то внутри самой базы возможно что то нужно поправить?
Не силен в mysql к сожалению совсем.
Неактивен
#2 05.06.2020 12:56:25
- deadka
- Администратор
- Зарегистрирован: 14.11.2007
- Сообщений: 2399
Re: Исправить базу.
Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли…
Неактивен
#3 05.06.2020 13:05:59
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
root@ispa:/var/www/www-root/data/www/mydomen# php admin/cli/mysql_compressed_rows.php -f
!!! error/generalexceptionmessage !!!
Неактивен
#4 05.06.2020 13:07:39
- deadka
- Администратор
- Зарегистрирован: 14.11.2007
- Сообщений: 2399
Re: Исправить базу.
нде, неинформативно (. А в логи пишется что-нибудь?
Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли…
Неактивен
#5 05.06.2020 13:10:16
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
Неактивен
#6 05.06.2020 13:14:11
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
vasya написал:
https://sqlinfo.ru/forum/viewtopic.php?id=7676
Видел это сообщение все сделал кроме третьего пункта он как раз мне и не понятен.
Переделать таблички (ALTER TABLE tablename ROW_FORMAT=DYNAMIC).
Можно как то внутри базы переделать таблички?
а потом например импортировать?
В базу могу заходить проблем нету, но что там нужно ввести чтобы исправить не догоняю.
Отредактированно ujhjl (05.06.2020 13:16:17)
Неактивен
#7 05.06.2020 13:28:39
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
в базе, т.е. в консоли mysql (или с помощью иного клиента phpadmin и т.д.) выполнить команды
ALTER TABLE tablename ROW_FORMAT=DYNAMIC
вместо tablename имя таблицы и так нужное кол-во раз
Неактивен
#8 05.06.2020 13:35:08
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
vasya написал:
в базе, т.е. в консоли mysql (или с помощью иного клиента phpadmin и т.д.) выполнить команды
ALTER TABLE tablename ROW_FORMAT=DYNAMIC
вместо tablename имя таблицы и так нужное кол-во раз
Так вопрос как узнать какие таблицы?
А все сразу возможно как то преобразовать?
Отредактированно ujhjl (05.06.2020 13:36:22)
Неактивен
#9 05.06.2020 14:02:43
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
SELECT CONCAT(«ALTER TABLE `», TABLE_SCHEMA,«`.`», TABLE_NAME, «` ROW_FORMAT=DYNAMIC;») AS MySQLCMD FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘имя вашей базы данных’;
сформирует нужный список команд
для дальнейшей автоматизации можно написать хранимую процедуру, которая их выполнит, см
https://webew.ru/articles/178.webew
https://webew.ru/articles/200.webew
Неактивен
#10 05.06.2020 14:57:30
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
Команду выполнил но не помогло. Все равно висит.
Your database has tables using Antelope as the file format. You are recommended to convert the tables to the Barracuda file format. See the documentation Administration via command line for details of a tool for converting InnoDB tables to Barracuda.
Неактивен
#11 05.06.2020 15:03:33
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
какую именно команду выполнили?
Неактивен
#12 05.06.2020 15:09:43
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
SELECT CONCAT(«ALTER TABLE `», TABLE_SCHEMA,»`.`», TABLE_NAME, «` ROW_FORMAT=DYNAMIC;») AS MySQLCMD FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ‘моя бд’;
Неактивен
#13 05.06.2020 15:13:17
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
этот запрос сформирует список запросов вида alter table … для всех таблиц из вашей бд, которые нужно выполнить
это просто автоматизация. чтобы в ALTER TABLE tablename ROW_FORMAT=DYNAMIC не вставлять руками имя каждой таблицы из бд
Неактивен
#14 05.06.2020 15:18:57
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
vasya написал:
этот запрос сформирует список запросов вида alter table … для всех таблиц из вашей бд, которые нужно выполнить
это просто автоматизация. чтобы в ALTER TABLE tablename ROW_FORMAT=DYNAMIC не вставлять руками имя каждой таблицы из бд
Он мне выводит такое
ALTER TABLE `veron`.`mdl_analytics_indicator_calc` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_models` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_models_log` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_predict_samples` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_prediction_actions` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_predictions` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_train_samples` ALTER TABLE `veron`.`mdl_analytics_indicator_calc` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_models` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_models_log` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_predict_samples` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_prediction_actions` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_predictions` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_train_samples` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_used_analysables` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_analytics_used_files` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assign` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assign_grades` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assign_overrides` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assign_plugin_config` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assign_submission` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assign_user_flags` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assign_user_mapping` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignfeedback_comments` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignfeedback_editpdf_annot` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignfeedback_editpdf_cmnt` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignfeedback_editpdf_queue` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignfeedback_editpdf_quick` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignfeedback_editpdf_rot` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignfeedback_file` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignment` ROW_FORMAT=DYNAMIC;
ALTER TABLE `veron`.`mdl_assignment_submissions` ROW_FORMAT=DYNAMIC;
и таких куча страниц но везде ROW_FORMAT=DYNAMIC;
Неактивен
#15 05.06.2020 15:24:50
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
все правильно, теперь все эти запросы (alter table .. =DYNAMIC) нужно выполнить
Неактивен
#16 05.06.2020 15:26:22
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
vasya написал:
все правильно, теперь все эти запросы (alter table .. =DYNAMIC) нужно выполнить
То есть брать по очереди и запускать?
там 18 страниц, а одной командой это не возможно сделать?
Ну как то сказать что все таблицы? Понимаю что могу глупость написать, но вдруг.
ALTER TABLE `veron`.`mdl_analytics_indicator_calc` ROW_FORMAT=DYNAMIC;
При чем когда делаю они возвращают пустой результат
MySQL вернула пустой результат (т.е. ноль строк). (Запрос занял 0.1083 сек.)
ALTER TABLE `veron`.`mdl_assignfeedback_editpdf_cmnt` ROW_FORMAT=DYNAMIC
Отредактированно ujhjl (05.06.2020 15:29:22)
Неактивен
#17 05.06.2020 15:29:42
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
ujhjl написал:
То есть брать по очереди и запускать?
там 18 страницALTER TABLE `veron`.`mdl_analytics_indicator_calc` ROW_FORMAT=DYNAMIC;
да, запускать по одному
или написать процедуру, которая сделает это в цикле
или вам повезло, если ваш клиент позволяет выполнять группу запросов.
Неактивен
#18 05.06.2020 15:31:30
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
ujhjl написал:
При чем когда делаю они возвращают пустой результат
MySQL вернула пустой результат (т.е. ноль строк). (Запрос занял 0.1083 сек.)
так и должно быть
Неактивен
#19 05.06.2020 15:34:24
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5791
Re: Исправить базу.
ujhjl написал:
То есть брать по очереди и запускать?
там 18 страниц, а одной командой это не возможно сделать?
Ну как то сказать что все таблицы? Понимаю что могу глупость написать, но вдруг.
или сделать бэкап, удалить базу, обратно залить (по идее должно сработать)
Неактивен
#20 05.06.2020 15:36:19
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
Супер спасибо помогло.
Выделил блоками и sql запрос выполнил.
А базу вроде перезаливал не помогало.
Отредактированно ujhjl (05.06.2020 15:37:09)
Неактивен
#21 05.06.2020 22:08:11
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
Рано обрадовался теперь вылезло вот такое и не дает регистрироваться пользователям.
И ругается на кодировку БД. как можно изменить COLLATION
Error reading from database
More information about this error
×Debug info: COLLATION ‘utf8mb4_bin’ is not valid for CHARACTER SET ‘utf8’
SELECT ‘x’
FROM mdl_user
WHERE LOWER(email) COLLATE utf8mb4_bin = LOWER(?)
AND id IN (SELECT id
FROM mdl_user
WHERE email = ?
AND mnethostid = ?) LIMIT 0, 1
[array (
0 => ‘as@mail.ru’,
1 => ‘as@mail.ru’,
2 => ‘1’,
)]
Error code: dmlreadexception
×Stack trace:
line 486 of /lib/dml/moodle_database.php: dml_read_exception thrown
line 1186 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
line 1918 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_recordset_sql()
line 1048 of /lib/authlib.php: call to moodle_database->record_exists_sql()
line 150 of /login/signup_form.php: call to signup_validate_data()
line 615 of /lib/formslib.php: call to login_signup_form->validation()
line 551 of /lib/formslib.php: call to moodleform->validate_defined_fields()
line 661 of /lib/formslib.php: call to moodleform->is_validated()
line 85 of /login/signup.php: call to moodleform->get_data()
Отредактированно ujhjl (05.06.2020 22:12:35)
Неактивен
#22 06.06.2020 08:50:20
- ujhjl
- Участник
- Зарегистрирован: 18.05.2018
- Сообщений: 22
Re: Исправить базу.
Сам отвечу, поменял
DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
на
DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED
Все заработало. Ошибка исчезла, рега работает.
Интересно почему только?
Неактивен
When I want to create a new newsletter activity in a course I get the following error:
Debug info: ERROR: invalid input syntax for integer: ""
SELECT f.id AS id, f.contenthash, f.pathnamehash, f.contextid, f.component, f.filearea, f.itemid, f.filepath, f.filename, f.userid, f.filesize, f.mimetype, f.status, f.source, f.author, f.license, f.timecreated, f.timemodified, f.sortorder, f.referencefileid, r.repositoryid AS repositoryid, r.reference AS reference, r.lastsync AS referencelastsync
FROM mdl_files f
LEFT JOIN mdl_files_reference r
ON f.referencefileid = r.id
WHERE f.contextid = $1
AND f.component = $2
AND f.filearea = $3
AND f.itemid = $4 ORDER BY itemid, filepath, filename
[array (
0 => 19,
1 => 'mod_newsletter',
2 => 'stylesheet',
3 => '',
)]
Error code: dmlreadexception
Stack trace:
line 474 of /lib/dml/moodle_database.php: dml_read_exception thrown
line 244 of /lib/dml/pgsql_native_moodle_database.php: call to moodle_database->query_end()
line 794 of /lib/dml/pgsql_native_moodle_database.php: call to pgsql_native_moodle_database->query_end()
line 827 of /lib/filestorage/file_storage.php: call to pgsql_native_moodle_database->get_records_sql()
line 397 of /lib/filelib.php: call to file_storage->get_area_files()
line 90 of /mod/newsletter/mod_form.php: call to file_prepare_draft_area()
line 204 of /lib/formslib.php: call to mod_newsletter_mod_form->definition()
line 95 of /course/moodleform_mod.php: call to moodleform->__construct()
line 255 of /course/modedit.php: call to moodleform_mod->__construct()
Software info:
- Moodle version: 3.1.3+ (Build: 20161115)
- Database: Postgresql 9.3+
HOW-TO:- Solve Moodle 2.7 on MySql 5.7.x Installation
The reason of doing this is I configured my apache for local virtual hosting rather than localhost (available in the next post). I found the error as mentioned below, and I tried different solution to solve it. I did few of the things to solve, they are as follows:
- Removed and installed MySQL server.
- Installed mysql 5.7v
- Installed Moodle 2.7+ stable version
- configured and deleted Moodle config.php few times.
- created and deleted database naming moodle(default created when initialized) and few other names.
- Gave permission to php5.6 instead of php7.0.2 in Ubuntu 16.04
Here’s the Solution, find below lines(183 — 191) or search for «
SELECT @@storage_engine"
and then replace it from «SELECT @@default_storage_engine».
=======Code Snippets(183 — 191): =======
// get the default database engine
$sql = » SELECT @@default_storage_engine»;
$this->query_start($sql, NULL, SQL_QUERY_AUX);
$result = $this->mysqli->query($sql);
$this->query_end($result);
if ($rec = $result->fetch_assoc()) {
$engine = $rec[‘@@storage_engine’];
}
$result->close();
===============================
Now, run your Moodle installation. It’s Working..!
// =============Error while Moodle Installation===========//
The situations I encountered were
System
Error reading from database
It is usually not possible to recover from errors triggered during installation, you may need to create a new database or use a different database prefix if you want to retry the installation.
Debug info: Unknown system variable ‘storage_engine’
SELECT @@storage_engine
[NULL]
Error code: dmlreadexception
Stack trace:
- line 443 of /lib/dml/moodle_database.php: dml_read_exception thrown
- line 187 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
- line 196 of /lib/ddl/mysql_sql_generator.php: call to mysqli_native_moodle_database->get_dbengine()
- line 248 of /lib/ddl/sql_generator.php: call to mysql_sql_generator->getCreateTableSQL()
- line 409 of /lib/ddl/database_manager.php: call to sql_generator->getCreateStructureSQL()
- line 364 of /lib/ddl/database_manager.php: call to database_manager->install_from_xmldb_structure()
- line 1498 of /lib/upgradelib.php: call to database_manager->install_from_xmldb_file()
- line 233 of /admin/index.php: call to install_core()
Moodle 3.2 site started showing error “Error reading from database”.
I checked config.php, the database credentials are correct, i was able to login to Amazon AWS RDS PostgreSQL database with the credentaials and able to see the database tables with command dt.
psql —h mydb.hwfckmarrpeo.ap—southeast—2.rds.amazonaws.com —p 5432 —U moodle_user —W |
I enabled debug in DB with following SQL commands
select * from mdl_config WHERE name = ‘debug’; select * from mdl_config WHERE name = ‘debugdisplay’; UPDATE mdl_config SET VALUE = 2047 WHERE name = ‘debug’; UPDATE mdl_config SET VALUE = 1 WHERE name = ‘debugdisplay’; |
But for some reason, moodle did not show any further debug info.
I did a search for the error message “Error reading from database” using ack command, that search inside files.
root@ip—172—31—13—4:/var/www/html# ack «Error reading from database» lang/en/error.php 216:$string[‘dmlreadexception’] = ‘Error reading from database’; root@ip—172—31—13—4:/var/www/html# ack dmlreadexception lib/dmllib.php 140: parent::__construct(‘dmlreadexception’, NULL, $errorinfo); course/tests/externallib_test.php 1788: $this—>assertEquals(‘dmlreadexception’, $e—>errorcode); lang/en/error.php 216:$string[‘dmlreadexception’] = ‘Error reading from database’; root@ip—172—31—13—4:/var/www/html# |
I added some debug code in file
That shows the SQL command that caused the failure. The error was
ERROR: column d.adsrc does not exist |
This was because PostgreSQL removed the column name adsrc. To fix, edit file
vi /var/www/html/lib/dml/pgsql_native_moodle_database.php |
Find (On line 394)
$sql = «SELECT a.attnum, a.attname AS field, t.typname AS type, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, d.adsrc |
Replace with
$sql = «SELECT a.attnum, a.attname AS field, t.typname AS type, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, pg_get_expr(d.adbin::pg_node_tree, d.adrelid) AS adsrc |
For more information on this patch, see MDL-67220
See moodle