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

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
// пример 1
a) $query = "SELECT id,text_name,textarea_desc,img_photo,date_reg FROM {$prefix2}_{$module} WHERE id='$id' AND check_active=1 ORDER BY $order LIMIT $limit";
или же
b) $query = "SELECT id,text_name,textarea_desc,img_photo,date_reg FROM ".$prefix2."_".$module." WHERE id='".$id."' AND check_active=1 ORDER BY ".$order." LIMIT ".$limit;

// пример 2
c) $query = "INSERT INTO {$prefix2}_{$module} SET text_name='$name',date_add=NOW(),text_fio='$fio' WHERE id='$id'";
или же
d) $query = "INSERT INTO ".$prefix2."_".$module." SET text_name='".$name."',date_add=NOW(),text_fio='".$fio."' WHERE id='".$id."'";

Как-то некий посетитель этого сайта назвал a и с -- говнокодом. Интересно узнать Ваше мнение по этому поводу.
Желательно услышать хоть какую-то аргументацию, вместо пресловутых трольских комментов ))
Все переменные перед использованием естественно приведены к безопастному виду.
Ни о каких инъекций речь просьба не поднимать...

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

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

    • Наверное затем чтобы получить в конечном массиве, мало ли куда потом этот массив передается. Не добавлять же ид потом отдельно.
      Ответить
  • С начало происходит лимит, а потом ордербай, надеюсь это было учтено.
    Ответить
    • Народ, забейте на сами запросы... я их от балды писат... Вопрос только про синтаксис!!!!
      Ответить
      • >>Народ, забейте на сами запросы... я их от балды писат.

        Че ты гонишь, у тебя все запросы такие. Тут еще никто не забыл, как ты фейлил в том треде.
        Ответить
  • То, что сразу бросается в глаза: в первых двух запросах не нужен лимит.
    Ответить
  • заминусуйте меня)
    Doctrine_Query::create()
      ->select('text_name,textarea_desc,img_photo,date_reg')
      ->from('MyModule')
      ->where('id = :id AND check_active = :status')
      ->orderBy('date_reg DESC')
      ->execute(array('id' => $id, 'status' => 1))
    Ответить
      • Как, как.. просто и логично.
        PS. Яхуею с отдельных личностей из аудитории говнокода, ты ни одного фреймворка не осилил?
        Ответить
  • Народ, забейте на сами запросы... я их от балды писат... Вопрос только про синтаксис!!!!
    Ответить
  • Переменные в двойных кавычках не комильфо...

    Это я так понимаю тег который заменяется {$prefics}? Почему что то тегами, а что то нет? Неудобно все это, но не смертельно конечно
    Ответить
    • Пожалуйста обоснованный ответ... т.к. ответы типа, так мне сказали -- не зачет. ))
      Ответить
      • Большие строки в двойных кавычках тормозят выполнение так как там ищутся переменные, лучше одинарные и конкатенация.

        Что то из переменных, а что то из тегов, ну тут вопрос удобства - я не знаю где эти теги могут быть зарыты.
        Ответить
          • Все зависит от объемов таких строк. При высоких нагрузках все имеет значение, а писать с использованием одинарных кавычек не сложно )
            Ответить
            • Вопрос не в том что сложне / не сложно...
              А в том можно / нельзя / говнокод.
              Ответить
              • Писать можно все. лишь бы синтаксис был верен. все 4 варианта имеют право на существование. Тут даже вопрос не в производительности. Вопрос в привычке и наличии в используемом редакторе подсветки синтаксиса. Я считаю что выбор кавычек дело каждого. другой вопрос о том что сам текст запросов трудно читаем выб их хоть не в 1 строчку писали б. 🙂
                Ответить
    • Ну имена таблиц имеют вид xxx_ru_new или же xxx_en_news и т.д.
      $prefix2 - это как-бы префикс с учётом языка
      $module - имя текущего модуля.
      а {} нужны из-за того, что-бы переменные считались разными, т.к.
      $prefix2_$module -- не прокатывает ((
      Ответить
  • Я вообще всегда следую правилу. Имена табл. в переменных не передавать опасно это. И меня смущает вот это WHERE id='".$id."'"; ну вот как то исторически сложилось что id он же индекс, а индекс в большенстве случаев целое число а Вы его в кавычки. А если не учитывать вопросы безопасности то 2 вариант мною более предпочтителен. и за того что в первом интерпретатор вставляет в строку вместо переменных значения а это какая никакая а работа. но и сходя из этого во втором случае надо поменять кавычки все двойные на одинарные а одинарные на двойные.
    Ответить
    • Все переменные $prefix2, $module, $order, $limit генерятся внутри скрипта... и они всегда корректны... пользователь их менять не может/не будет...

      >> втором случае надо поменять кавычки все двойные на одинарные а одинарные на двойные.
      Вот про это как-бы и вопрос был... ради чего это??? Типа для Выигрыша 1 миллиардной секунды???
      Ответить
  • Вопрос ведь вот в чём...
    Почему использование переменных в " является неприемлемым???
    т.е. "... $name ..." недопустимо, а ' ... '.$name.' ...' - это уже признак хрошего тона...
    Лично для меня первый вариант в 100 раз читабельнее, чем вариант к разорванными кавычками и конкатенацией
    Ответить
    • Дело привычки, читается конкатенация легко если привык. А сколько выигрывается, тестируйте.
      Ответить
      • Вопросы производительности тут вообще никак не влияют...
        В Drupale вообще используются замены консткукций на переменные...
        И вообще даже не чистый SQL, а надстройка над ним (для универсальности)...
        Так что теперь считать что Drupal говнокод, т.к. можно быстрее это сделать???
        Ответить
        • В любой CMS есть говнокод, чтобы утверждать что CMS говнокод я уже слишком опытен.

          Пишите как хотите, на самом деле, я пользуюсь одинарными кавычками за исключением тех случаев когда правлю чужой код или пишу для CMS. Если чужой код или CMS я пишу так как там уже написано чтобы не выбивалось из общего стиля.
          Ответить
    • Это дело привычки. при использовании " и переменных я переменые теряю. и кстати если исплользовать 1 подобную строку то не страшно а если в циклах. Как говорится одна бабушка 20 коп. , а пять вот уже и рубль.
      Ответить
      • Я тоже могу читать и так, и так... Но тут дело привычки.
        Лично мне удобно использовать варианты a/c
        Ответить
        • И смысл был выкладывать это? Чтоб тебе сказали, что это говно, но ты потом гордо заявил бы "Лично мне удобно использовать варианты a/c"?
          Ответить
          • Блин, мозкотрах, потеряйся, пока что я не увидел кроме тебя другого говна.
            Так что говно здеть пока только ТЫ.
            Ответить
            • Я не вижу сути проблемы. Если не учитывать проблемы безопасности, адекватность запросов. То это не говно. если расматривать код в практическом смысле предположить что используемые переменные могут быть изменены то это говнище аж тут воняет.
              Ответить
              • Изменены могут только переменные, используемые в полях...
                Все технические переменные проверяются и в них всегда попадает только корректная информация.
                Ответить
              • Это такой прием у быдлокодеров, постишь свое продакшн говно с пометкой это только для примера, в надежде, что кто-нибудь сжалится и напишет ему решение его же задачи за которую он бабло получает.
                Ответить
                • Интересно, ты кроме своих тупых комментов вообще что-то умное сказать можешь?
                  И где ты тут видишь просьбы о "сжалится и напишет ему решение его же задачи за которую он бабло получает"...
                  Короче потеряйся...
                  Ответить
                    • Завёл-бы себе имя какое-то, а то непонятно с одним дурачком переписываюсь или же Вас много таких.
                      Ответить
                    • Ув. Товарищ я не понимаю. что Вас лично грызет в этом коде. Никакой конструктивной критики я от Вас я не вижу. А оскорблять чела. находясь от него в недостигаемости это скажу я вам пидарасеной попахивает. Если нечего сказать по существу. то хотябы не мусорте на каждый ваш пост мне на мыло письмо приходит я ужо устал чистить ящик. И кстати не кто не зхнает как энту хрень отключить. А то у меня уже мысли появилсиь не настоить ли мене спам фильтр и на говнокод. Извините что не втему.
                      Ответить
                      • Он просто кроме троллинга и "где здесь си++" ничего не умеет делать.
                        Ответить
  • Вопрос лишь в умении читать код.
    Когда пользователь не может его читать, часто такой код называет говном.
    Принципиальной разницы в запросах никакой!
    Рассусоливать вопрос скорости обработки интерпретатора смысла нет, ибо наносекунды в разнице обработки - это уже чистой воды аутизм.
    Из моего опыта: очень редко, кто пишет в стиле a) и c), и часто в b) и d).
    Связано это с суровостью кодеров, которые пользуются простыми редактарами или вовсе текстовыми редакторами, которые переменные a) и c) не подсвечивают. Заставить использовать современные средства разработки таких товарищей невозможно. Вот они и негодуют, что им ничего не понятно.

    Заключение: это не говнокод!

    PS: подсветка кода в данном случае (ваш пример) не выполнена для переменных типа {$prefix} ...
    Ответить
    • Первый обоснованный ответ.
      Notepad++ вроде подсвечивает у меня все переменные и в {} тоже.
      Ответить
    • Кхм, у меня расстройство мозга судя по тому, что использование одинарных кавычек в целях повышения общей скорости работы - аутизм. Сурово.
      Ответить
      • Ну это стандартное объяснение почему " лучше '
        т.к. других причин у людей нету. им так сказали и поэтому всё остальное для них - говнокод.
        Ответить
  • Я бы так отформатировал...
    $sql="
    SELECT 
      text_name,
      textarea_desc,
      img_photo,
      date_reg 
    FROM ".$prefix."_".$tablename."
    WHERE 1
      AND id='".$id."' 
      AND check_active='1'
    ";
    
    $sql2="
    INSERT INTO ".$prefix."_".$tablename." 
    SET 
      text_name='".$name."',
      date_add=NOW(),
      text_fio='".$fio."'
    WHERE id='".$id."'
    ";
    Ответить
    • Ну форматирование - это не принципиально... хотя примерно похожий на Ваш вид я использую. Но не WHERE 1 AND ...
      Ответить
  • Я обычно переменные в строку вставляю, обрамляя их все фигурными скобками. Это просто визуально (для меня) проще воспринимается. А вообще — да, дело привычки.
    А если в проекте на производительность начинает критически влиять использование одинарных или двойных кавычек, значит, что с проектом уже давно что-то не то.
    Ответить
  • Получился мем:

    — А, вот эти двое.
    — Не-не-не-не-не, в рот мне ноги.


    — Вопрос только про синтаксис.
    — ГОВНО!!!111
    Ответить
  • $max = 5000;
    $sum = 0;
    $time = microtime(1);
    for ($i=0; $i<$max; $i++)
    {
    	$query = "SELECT id,text_name FROM ".$prefix2."_".$module." WHERE id='".$id."' ORDER BY ".$order." LIMIT ".$limit;
    }
    $sum = microtime(1) - $time;
    echo 'Вариант с одинарными: ' . $sum . ' сек<br>';
    
    
    $sum = 0;
    $time = microtime(1);
    for ($i=0; $i<$max; $i++)
    {
    	$query = "SELECT id,text_name FROM {$prefix2}_{$module} WHERE id='$id' ORDER BY $order LIMIT $limit";
    }
    $sum = microtime(1) - $time;
    echo 'Вариант с двойными: ' . $sum . ' сек<br>';


    В итоге оказалось, что одинарные кавычки на самом-то деле более тормознутее ))
    Вариант с одинарными: 0.0143549442291 сек
    Вариант с двойными: 0.0130221843719 сек
    Ответить
    • У вас мания к наноскопическим оптимизациям? Будующий С++ник.
      Ответить
      • Клоун, я и так знаю и умею писать на СИ++ (VS)
        Но в данный момент пишу в основном сайты на PHP
        Ответить
        • Ты их не пишешь, а высираешь. Вообще стыдно должно быть за такой отборный говнокод.
          Ответить
                • А чё с тобой уёбком вообще спорить.
                  Ты никто и звать тебя никак.
                  Исчезни, недоносок.
                  Ответить
                  • Что ты, это с тобой, ограниченным, спорить смысла нет, твоего одноразрядного IQ хватило только на пхп.
                    Ответить
                • Он ещё написал "более тормознутее", а это речевая ошибка.
                  Ответить
          • Лесенка пошла обратно. ))

            А вообще это нанотехнологии.
            Ответить
            • Просто все твердили, что использование двойных кавычек на порядок дольше выполняется, а оказалось наоборот.
              Ответить
    • Феерический Далбаеб!
      В обоих случаях написал двойные кавычки:
      "SELECT id,text_name FROM ".$prefix2."_".$module." WHERE id='".$id."' ORDER BY ".$order." LIMIT ".$limit;
      Ответить
      • Похоже я погорячился насчет твоего IQ - он вообще отрицательный.
        Ответить
      • Не важно... Даже если так:
        $query = 'SELECT id,text_name FROM '.$prefix2.'_'.$module.' WHERE id='.$id.' ORDER BY '.$order.' LIMIT '.$limit;

        Вариант с одинарными: 0.0105130672455 сек
        Вариант с двойными: 0.0089418888092 сек
        Ответить
        • Да хватит уже оправдываться. И так пять тонн фейлов в день выдаешь.
          Ответить
        • просто долбоёб
          делай замеры чтобы шли хотя бы минуту,и тестируй с разными длинами строк
          Ответить
            • А тебе уже и не надо? ХулиПошто тогда на гк ходишь, уёбище лесноебоярин?
              Ответить
    • Моё мнение, что для достоверного теста надо 1. Изменять значения переменных. 2. Увеличить время выполнения цикла хотябы дл минуты. 3 использовать различные длины строк. Причем длинные символов за 1000. И все станет ясно.
      Ответить
    • А при чём тут метод вывода к методам формарования строк ???
      Каким образом выводить строку - не важно.
      Ответить

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

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

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


    8