mysql_real_escape_string / Говнокод #8592 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
UPDATE  zayavlenie_tmp
    SET error    = 1,
        errorcod = 4
    FROM   zayavlenie_tmp
    WHERE  zayavlenie_tmp.error IS NULL
                AND (rtrim(fam) = ''
                     OR LEN(ltrim(rtrim(fam))) < 2
                     OR fam LIKE '%0%'
                     OR fam LIKE '%1%'
                     OR fam LIKE '%2%'
                     OR fam LIKE '%3%'
                     OR fam LIKE '%4%'
                     OR fam LIKE '%5%'
                     OR fam LIKE '%6%'
                     OR fam LIKE '%7%'
                     OR fam LIKE '%8%'
                     OR fam LIKE '%9%'

UPDATE  zayavlenie_tmp
    SET error    = 1,
        errorcod = 5
     FROM   zayavlenie_tmp
      WHERE  zayavlenie_tmp.error IS NULL
                AND (rtrim(im) = ''
                     OR LEN(ltrim(rtrim(im))) < 2
                     OR im LIKE '%0%'
                     OR im LIKE '%1%'
                     OR im LIKE '%2%'
                     OR im LIKE '%3%'
                     OR im LIKE '%4%'
                     OR im LIKE '%5%'
                     OR im LIKE '%6%'
                     OR im LIKE '%7%'
                     OR im LIKE '%8%'
                     OR im LIKE '%9%'

При импорте поля проверяются на соответствие (около 30 разнобразных правил). Хранимику писал мой начальнег :) Выкладываю УЖЕ немного исправленный для удобопонимания вариант, в исходнике таблицы еще зачем-то джойнились сами на себя. Всего в хранимике 50 (!!!) таких запросов, и каждый не менее эпичный )) Хотел исправить это хозяйство одним более-менее цивильным запросом, но где-то на половине у меня руки опустились

Запостил: spray07 spray07, (Updated )

Комментарии (24) RSS

  • А фамилии с пробелами посредине разрешены?
    А еще вопрос, ради себя интересуюсь, для расширения кругозора, ваш вариант запроса, у меня есть собственные предположения, но хотел посмотреть как правильно
    Ответить
  • Может как вариант делать эти проверки при вставке и апдейте
    Ответить
    • Конкретно в нашем случае проверки эффективней делать в этой таблице - она временная, там то что импортируем из файла. После проверок записи без ошибок перемещаются в основную таблицу.
      На счет пробела в центре я даже не заметил)) Да, их тоже быть не должно 😀
      Ответить
  • Что думаете на счет этого варианта? Это я начал так переделывать, может и я наклал так-то?! 🙂

    UPDATE zayavlenie_tmp
    SET errorcod = CASE
    WHEN ltrim(rtrim(fam)) LIKE '%[0-9]%' OR LEN(ltrim(rtrim(fam))) < 2 THEN 5
    WHEN ltrim(rtrim(im)) LIKE '%[0-9]%' OR LEN(ltrim(rtrim(im))) < 2 THEN 4 ELSE NULL END;
    update zayavlenie_tmp
    set error = 1 where errorkod is not null;

    *результат этих запросов может отличаться - там присвоит первый код ошибки тут последний , но не суть важно в моем случае. и повторюсь там ~50 таких проверок еще
    Ответить
    • Не проще хранить сразу ltrim-нутые-rtrim-нутые значения?
      Ответить
  • А можно увидеть исходный вариант? Исправленный это не Ъ.
    Ответить
    • UPDATE zayavlenie_tmp
      SET error = 1,
      errorcod = 4
      FROM zayavlenie_tmp
      LEFT OUTER JOIN
      (SELECT id
      FROM zayavlenie_tmp
      WHERE zayavlenie_tmp.flk IS NULL
      AND (rtrim(fam) = ''
      OR LEN(ltrim(rtrim(fam))) < 2
      OR fam LIKE '%0%'
      OR fam LIKE '%1%'
      OR fam LIKE '%2%'
      OR fam LIKE '%3%'
      OR fam LIKE '%4%'
      OR fam LIKE '%5%'
      OR fam LIKE '%6%'
      OR fam LIKE '%7%'
      OR fam LIKE '%8%'
      OR fam LIKE '%9%')) AS flk
      ON zayavlenie_tmp.id = flk.id
      WHERE flk.id IS NOT NULL;

      Вот исходный вариант (второй запрос аналогично). Сейчас опять читаю и не могу вкурить зачем там этот джойн
      Ответить
      • Это такой способ проверки условий, насколько я понимаю.
        Ответить
  • Зачем люди пишут код не являясь программистами?
    Почему не нанять программиста, и пускай у него голова болит
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8