1. PHP / Говнокод #19043

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    $dbh = new PDO("mysql:host=$this->dbHost;dbname=$this->dbName", $this->dbUser, $this->dbPassword);
            $dbh->exec("set names utf8");
    
            $street = $streetPart.'%';
            if (isset($arChooseCity[$cityIndex])) {
                $condition =
                    "(city_az LIKE '$city'"
                    ." OR city_az LIKE '$arChooseCity[$cityIndex]'"
                    ." OR city_ru LIKE '$arChooseCity[$cityIndex]'"
                    ." OR city_en LIKE '$arChooseCity[$cityIndex]'"
                    ." OR city_ru LIKE '$city'"
                    ." OR city_en LIKE '$city')"
                    ." AND (geo_az LIKE '$street'"
                    ." OR geo_ru LIKE '$street'"
                    ." OR geo_en LIKE '$street'"
                    ." OR geo_az LIKE '% $street'"
                    ." OR geo_en LIKE '% $street'"
                    ." OR geo_ru LIKE '% $street')"
                ;
            }
            else {
                $condition =
                    "(city_az LIKE '$city'"
                    ." OR city_ru LIKE '$city'"
                    ." OR city_en LIKE '$city')"
                    ." AND (geo_az LIKE '$street'"
                    ." OR geo_ru LIKE '$street'"
                    ." OR geo_en LIKE '$street'"
                    ." OR geo_az LIKE '% $street'"
                    ." OR geo_en LIKE '% $street'"
                    ." OR geo_ru LIKE '% $street')"
                ;
            }
            $condition_type = " AND type = 'geo_object'";
            $condition_street = " AND type = 'street'";
    
            $query_street = $dbh->prepare("SELECT * from `addresses_new_new` WHERE $condition $condition_street GROUP BY street_{$lang}, city_{$lang} ORDER BY weight DESC LIMIT 0, {$maxLimit}");
            $query_type = $dbh->prepare("SELECT * from `addresses_new_new` WHERE $condition $condition_type LIMIT 0, {$maxLimit}");
    
            $query_street->execute();
            $query_type->execute();

    match - against никому не нужен! пользуйся только like.

    Запостил: akanit, 18 Ноября 2015

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

    • match - against - Ну это надо еще знать. И вообще не факт, что match будет работать на каком нибудь постгре а PDO предполагает возможность перехода на другую СУБД под влиянием правой пятки.
      Ответить
      • Скажу больше: match against будет работать только для тех колонок, к которым построен полнотекстовый индекс, а в MySQL для хранилища InnoDB его не сразу завезли (я даже не знаю, есть ли он сейчас).

        В таких случаях лучше вообще использовать внешний индексатор типа Sphinx или mnoGoSearch.
        Ответить
        • есть
          https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html
          >внешний индексатор типа Sphinx или mnoGoSearch.
          ИМХО лучшее решение
          Ответить
        • Ну конечно нужен вшений серч типа люсьена или сфинкса. Как минимум потому что когда у тебя 46 полей ты сойдешь с ума. Отсутствие полнотекстового поиска для самого главного движка это была конечно особая подстава от мускуля. Мускуль как-бы кричит : "не используйте меня! не используйте никогда!". Но люди глухи.
          Ответить
        • > mnoGoSearch
          GomnoSearch
          Ответить
      • > это надо еще знать
        Конечно, это не для таких тупых алкашей как ты!
        Ответить
        • дааа конечно это 3 высших образования надо :)
          Ответить
      • >>PDO предполагает возможность перехода на другую
        Чушь полная.

        PDO это не ORM а драйверонезависимый способ запуска SQL кода.
        Даже твой "LIMIT 0" не на каждой БД заведется
        Ответить
    • Я правильно понимаю что люди умудрились сделать код с SQL Injection даже с PDO?
      Талант PHPшника не пропьешь
      Ответить
      • prepare вообще без параметров — это талант!
        Ответить
      • Автор вброса даже не заметил в чём говно, переживает бедняга за match against.
        Ответить
        • Мне казалось основные ошибки не нужно описывать... ведь и так скверный код
          Ответить
    • vanished
      Ответить
      • Полностью с Вами согласен. Пишущим такой код нужна срочная помощь. Какие ноотропы посоветуете?
        Ответить

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