внутри ядра Moodle, при отправке запроса в базу данных есть вызов preg_match_all ищу: (двоеточие), чтобы найти параметры запроса.
У меня есть строка (внутри «»), состоящая из цифр, двоеточия и буквы ( «102516101: т»).
Конечно, это не означает, что для параметра. все же Moodle ожидает, что один из-за двоеточия (:).
Как я могу предотвратить preg_match_all заглянув внутрь кавычки?
или у кого-нибудь есть другая идея?
Согласно комментариям, оставленным выше, вы должны явно указать переменные, используемые в вашем операторе SQL. Другими словами, вы не должны создавать свой оператор SQL вручную или необходимый минимум.
Пример:
$sql = "SELECT * FROM {groups} WHERE name = :name";
$params = array('name' => '102516101:t');
$DB->execute($sql, $params);
Вы также заметите, что имена таблиц указаны так: {table_name}
, они автоматически расширяются с правильным префиксом.
Других решений пока нет …