"PHP" / Говнокод #19690 Ссылка на оригинал

0

  1. 1
https://habrahabr.ru/post/280121/

RestAPI в 2016 году. Отсосите, любители фреймворков и оттестированных библиотек

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

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

  • Плохой код потому что используется PDO
    Нужно собирать запросы в ручную, иначе не получится SQL инъекции.

    Но вот за вот этот вот кусочек кода я готов простить ВСЁ:
    } else
                                    view::error("Incorrect data type for: " . implode(', ', $wrong_types), 204);
                            } else
                                view::error("Missing parameters: " . implode(', ', $missing_parameters), 204);
                        } else
                            view::error("Method in developing.", 503);
                    } else
                        view::error("The method '" . $action . "' does not exist.", 204);
                } else
                    view::error("No params received.", 204);
            } else
                view::error("Method was not received.", 204);
        }
    .

    Хиляки пишут классы на своих Java и C#, потом хилякам тулы генерируют .wsdlки, а другим хилякам по этим .wsdlкам генерируются клиенты

    Фу!
    Пых + рест наше все
    Ответить
        • Можно подготавливать не все параметры, некоторые из них приклеивать вручную.

          Ну и ещё, как оказалось, готовые фреймворки фильтруют не всё:
          https://habrahabr.ru/post/140145/
          Ответить
          • Так тут люди именно фигачат мимо PDO склеивая вручную запросы потому что хотят делать и параметризировать такое, што субд не понимает

            Но вообще пыхопроблемы конечно
            В нормальных ЯП и фреймворках вроде Python/Django такого практически нет
            Ответить
    • Простите, пожалуйста, но моё личное мнение - это - ебал я это ваше PDO. Говно оно - то ещё. Хотя бы потому, что в "multiple insert" не умеет. Потому что ограничивает всю мощь SQL. Потому что, это SQL-без-рук-без-ног, но только в фантике. А фантик играет лишь роль взрослого, когда играется ребёнок. Ну чтобы мамка не заругала.
      Фу, короче, так жить.
      PS. Заранее спасибо.
      Ответить
      • > "multiple insert"
        Можно пример, как этот multiple insert выглядит?
        Ответить
          • хахахахахахаха

            реально не поддерживает

            одного этого достаточно чтобы никогда не писать на PHP
            Ответить
            • Пхп - это для одних задач. Для обработки данных существует sql. А sql, как известно, язык множеств, которое это ваше pdo - откровенно посылает на хер. Хреново это всё.
              Ответить
              • Существует два способа работы с базами данных из языков программирования.

                Один способ называется prepared statements. Другой называется "через жопу" (он же "склеиваем строки вручную").

                Существует так же два вида языков: в одних через prepared statements можно описать DML. К таким языкам относятся python с его pep 0249, java с jdbc, с# с ado.net, perl с его DBI/DBD.
                К другим языкам (т.н. "очень плохие языки" или "языки в которых нужно вручную склеивать строки") относится PHP.

                Вопросы?
                Ответить
                • У меня один вопрос - при чём здесь языки? Нормальную либу и на PHP можно написать.
                  Ответить
                  • Очевидно при том, что в нормальных языках принято писать нормальные драйверы

                    А у ПХП такого драйвера нет, и никого это не ебет.
                    В итоге приходят istemы, говорят что PDO говно, и начинают клеить SQL строки руками

                    А потом SQL инъекции
                    Ответить
                  • Можно, но она есть не везде. Ставить либы на php ведь сложно.
                    Ответить
                • Для prepared statements вовсе не обязательно использовать PDO. Можно обойтись Mysqli или другими драйверами для соответствующей СУБД.
                  Ответить
                  • да, хотя все равно отстой в том что код получается database-specific

                    с другой стороны, для 89% это не важно

                    PS: фуу
                    инкаус знает mysql и php
                    вот это зашквар
                    Ответить
                      • я зарекся

                        Вот я не шучу сейчас: не существует ни одного повода для меня использовать эти технологии
                        Ответить
                    • От database-specific никуда не деться. При переходе с одной СУБД на другую зачастую приходится менять формат таблиц, потому что СУБД может не поддерживать требуемый тип данных.
                      Ответить
                      • базу нужно менять конечно, а причем тут код?
                        код можно (если _очень_ повезет) сделать database-агностик и вообще не трогать

                        У меня есть небольшой проектик на Django/Python, там всё через ORM и если я решу с постгри перейти на другую БД, я могу вообще не трогать паййтоновый код

                        Но это конечно мне крупно повезло что он такой маленький
                        В серьезных проектах приходится писать database-specific код
                        Но все равно его там процентов 10%, не больше
                        Ответить
                      • типы данных и близко не основная причина db-specific кода, там и драйвер нормально справляется их селектить и апдейтить

                        DDL же не обязательно выносить в прикладной уровень, ничего страшного, если это будет init скрипт, запущенный под конкретную базу 1 раз в жизни решения

                        а вот мат вьюхи, рекурсивный обход, процедуры/пакеты, gis-расширения, олап - т.е. все то, что уже не попадает под "нам насрать в чем хранить данные форума из 3 таблиц, у нас пыхопе", а попадает под "давайте сокращать время селекта наших сложных данных", и надо дергать в рантайме из прикладного уровня - вот это да, это db-specific
                        Ответить
          • prepare + цикл с execute уже не катят? Они могут и побыстрее оказаться, чем эта срань (если внутри одной транзакции идут)...

            З.Ы. Ой, сорри, у вас же транзакций нету. Не подумал.
            Ответить
            • Да есть там всё. Но как обычно - через жопу. Но вот multiple insert - нету.
              Ответить
            • >>Ой, сорри, у вас же транзакций нету.
              у кого это "у вас"?
              Ответить
                • ггг, mysql_query("START TRANSACTION"); работает
                  Но лучше конечно $pdo->beginTransaction()

                  в самой мускуле есть транзакции в InnoDB, нет их в MyISAM только
                  Ответить
                  • > нет их в MyISAM только
                    Я знаю. Но ты думаешь, что те, кто юзает mysql_* и клеит запросы через строки, юзают InnoDB?

                    Они же либо сознательно пишут под говнохостинги (= myisam only) либо просто долбоёбы...
                    Ответить
                    • Так он там по-умолчанию уже тыщу лет, разве нет?
                      MyISAM вообще депрекейтед
                      Ответить
                      • Ну вот, к примеру, вбиваем в гугл "бесплатный хостинг php". Первой строчкой идёт какой-то hostinger. Смотрим описание тарифных планов. Во фришном поддержки innodb нет. Что и требовалось доказать.
                        Ответить
                        • в моем детстве в бесплатном хостинге и MySQL-то могло не быть

                          А еще были такие хостинги где БД 4.0, а клиент от нее 3.23. Потому что админ тупой пидирас базу обновил, а php не пересобрал.

                          Или например PDO есть, а драйверов к нему ни одного нет
                          Ответить
                        • Скажи мне, Борманд

                          Ты бы хотел участвовать в проекте, у которого нет даже денег на хостинг"?
                          Ответить
                          • Нет конечно. Но есть же добрые люди, которые пишут всякие форумчики, чтобы их можно было ставить на подобные говнохостинги...
                            Ответить
                            • а зачем?

                              почему не использовать вконтакте? или ucoz?
                              Ответить
                              • Потому, что вконтакте требует логина привязанного к телефону, да и вообще это два сайта, переход с которых будет сложным, в отличие от переноса пыхоговна на другой хостинг.
                                Ответить
                                • Ещё во Вконтактике сообщество могут заморозить за внезапную смену тематики, за накрутку участников и вообще за любую подозрительную с точки зрения администрации ВК деятельность.
                                  Ответить
                    • В пыхе несколько напрягает клеить запросы через строки, (или даже через implode). Оное решается через sql-процедуру или триггер. А иногда и myisam - вполне так себе. Всё зависит от задач.
                      PS. И не вижу ничего плохго в mysql_*, тем более если у товарищей прямые руки.
                      Ответить
                      • sql-процедуру -- это хорошо, но это создает отдельный уровень абстракции так как APIем базы становятся не таблицы а процедуры

                        Кроме того процедуры нужно где-то хранить, версионировать, накатывать на сервер, итд.
                        Ответить
                    • > Но ты думаешь, что те, кто юзает mysql_* и клеит запросы через строки, юзают InnoDB?

                      Ты думаешь, что те, кто юзает mysql_* и клеит запросы через строки знают что такое транзакции?
                      Ответить
                • > У тех, кто юзает функции mysql_*.
                  Такие ещё остались? О_о
                  Ответить
      • Что? Чем это оно ограничивает?? Ты с ORM не путаешь??
        Ответить
          • ну да ну да, нужно годами хуячить одинаковый код руками с SQL инъекциями чтобы потом говорить "у меня 10 лет опыта пхп"
            Ответить
            • Да я уже вырос из этого. И сейчас я вообще не про инъекции. Инъекции - это инфантильность, я считаю.
              Ответить
    • Чувак уделал компанию RedHat, или кто там делает Hibernate 🙂
      Ответить
      • кстати, любимый вопрос изи-левела на собеседовании, всегда ли надо использовать хайбейрнейт, или, может, у него тоже есть проблемы
        Ответить
        • За ответы "да, всегда" и "конечно никогда" нужно сразу гнать на мороз

          Кстати, а видели таких кандитатов которые говорят "у меня 10 лет опыта программирования под Oracle". "А напишите запрос для выбора всех польхователей из группы Foo во много-ко-многим" "Ой знаете, я напрямую запросов не писал никогда, у нас DAO и ORM"
          Ответить
  • if(($var === 'true') || ($var === true))
        return true;
    elseif(($var === 'false') || ($var === false))
        return true;
    else
        return false;

    Лол.
    Ответить

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

Помни, guest, за тобой могут следить!

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


    8