majordomo icon indicating copy to clipboard operation
majordomo copied to clipboard

error clearScheduledJob 2 (((

Open xor2016 opened this issue 5 years ago • 2 comments

https://github.com/sergejey/majordomo/blob/5f9a1993881f8e0dc9966979af5afdbaa888587d/lib/common.class.php#L384

Функция DBSafe экранирует символ подстановки в маске слэшем(( и SQLExec("DELETE FROM jobs FROM jobs WHERE TITLE LIKE '" . DBSafe('motion%') . "'") превращается в SQLExec("DELETE FROM jobs FROM jobs WHERE TITLE WHERE TITLE LIKE 'motion\%'), что не работает. dbsafe1() не экранирует % и всем бы была хороша, но в случае like хорошо бы экранировать символ _, который часто используется в названиях джобов и, в то же время, является одиночной маской в mySQL вот так у меня работает

function clearScheduledJob($title)
{
    $title = str_replace("_", "\_", dbsafe1($title)); //dbfsafe1 не экранирует %, тут  добавил экранирование \_ (часто встречается в названиях джобов)
    SQLExec("DELETE FROM jobs WHERE TITLE LIKE '" . $title . "'");
}

xor2016 avatar Apr 18 '19 18:04 xor2016

Использование LIKE тут ненужно и вредно. DBSafe защищает только от кривых рук. я у себя это все давно убрал.

andrei-trybukhouski avatar Sep 15 '19 11:09 andrei-trybukhouski

см. встроенные в МДМ функции -- заявлено ClearScheduledJob('title'); -- может использоваться маска типа "title%"

xor2016 avatar Jan 02 '20 21:01 xor2016