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

0

  1. 1
select count(*) from jxlspp_prices  where 0!=0  or catid = 2	}

А вот так его!

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

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

  • Похоже на самоклейку из поста выше, для генерируемой строки самое то. Лично сам предпочитаю пользоваться 1=1 для безусловного true, 1=2 для false.
    Ответить
      • а вот такую фигню наблюдал в выхлопе какого-то пхп-обфускатора. Но там именно пых был.
        Ответить
      • Ой да ладно. Вполне переносимое сравнение, которое вполне очевидно.
        Ответить
      • WHERE 123.2*11.1 == 123.2*11.1
        На некоторых платформах вернет false, а на некоторых true
        Ответить
        • DELETE FROM users WHERE 0.1 + 0.2 = 0.3

          (и молимся, чтобы SQL считал это во флоатах, а не в децималах)
          Ответить
                  • КО как бы намекает, что у даубла больше точность, поэтому в то время, когда флоат ещё не расходится из-за большей дискретности (больше растояние между дискретами), то даубл уже поехал.
                    Ответить
                    • Да нет, просто везение, порублены на разных разрядах. Во флоате удачно отрубилось, в дабле не очень.

                      Как 0.1, так и 0.2 и 0.3 это бесконечные двоичные дроби:
                      0.1 = 0.00(0011) = 0.0000110011...
                      0.2 = 0.00(0110) = 0.0001100110...
                      0.3 = 0.00(1001) = 0.0010011001...

                      Если складывать так - все ок:
                      0.0000110 + 0.0001100 = 0.0010010

                      Если же на один разряд больше - то фейл:
                      0.00001100 + 0.00011001 = 0.00100101

                      Если еще на один разряд больше - опять все ок:
                      0.000011001 + 0.000110011 = 0.001001100
                      Ответить
                        • > Тык я о том же.
                          > в то время, когда флоат ещё не расходится из-за большей дискретности (больше растояние между дискретами), то даубл уже поехал.

                          Не-не-не девид блейн. Дискретность и то что дабл длиннее флоата тут к делу совершенно не относится. Тут дело в точном количестве разрядов - если бы дабл был бы на разряд короче или длиннее - получился бы корректный ответ. А если флоат был бы на 1-2 разряда короче, лень считать на сколько именно, то он бы тоже глючил. Вот так.
                          Ответить
    • *ковыряется в носу*
      А мне не бывает лениво сделать в склейке условий '<условие> AND ' и после всей цепочки сделать сабстринг или лефт без 5-ти символов последних.
      Зато на выхлопе запрос - красота.
      Но против 1=1 ничего не имею, техника неплохая.
      Ответить
      • В том же пыхе:
        $conditions = array("a = b", "c like 'd%'");
        $where_clause = implode(" AND ", $conditions);
        Ответить
      • Не всегда можно обрезать условия, совсем не всегда. Да и обрезать заранее известное значение тоже не сильно красиво.
        Нужен какой-то форматтер, который будет это учитывать. А не изобретать велосипед.
        Ответить
  • Блин, вы прикалываетелсь?
    Почему просто не написать "SELECT * FROM `xxx` WHERE 1; " или "SELECT * FROM `zzz` WHERE 0; " или "SELECT * FROM `xxx` WHERE true; "
    или просто "SELECT * FROM `xxx`"?
    В данном случае "where 0!=0 or catid = 2" равносильно "SELECT * FROM `xxx` where catid = 2".

    На кой здесь вычисления и сравнения?
    Ответить

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

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

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


    8