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

0

  1. 1
  2. 2
  3. 3
<?php
$q=mysql_num_rows(mysql_query("SELECT * FROM `users`"));
>

Печально, но так поступают 85% кодеров..

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

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

  • "85% кодеров"
    ой да ладно...какие там 85... ну может 15%
    Ответить
  • А как правильно? Что тут не так?
    (или имеется ввиду, что вместо * нужно юзать id? или прикол в другом?)

    upd: COUNT(*) - правильно? o shi~
    Ответить
      • Разве это играет такую большую роль?
        Я понимаю, что правильно называть это $num_rows или $num или $count, но...
        Ответить
      • Прикол скорее в том, что по любому чиху дёргается ВСЯ таблица 🙂

        В данном случае надо было:
        SELECT COUNT(*) FROM `users`
        Ответить
        • Тьфу, блин...
          Наряду с *, в данной строчке используется "получение" конечного результата минуя все остальные (включая возможные исключения) пользуясь лояльностью php к тем кто так пишет. Такую хрень - хреново отлаживать.
          --
          Ошибка компиляции комментария:
          csrf verification error
          Ответить
  • В общем ошибки отрывка:
    1.Нет лимита запросу,в случае 100000 записей вернёт их все.
    2.Делается SELECT сразу всех полей(SELECT 'id','date') должно быть.
    3.Нет проверки на ошибку(if ($mysql_query){}).
    4.Если добавить переменную в sql запрос,то sql инъекция будет проходить на ура (mysql_escape_string()).
    Ответить
    • КО: в общем ошибка одна - select count(*) from users

      притом, что в разных БД еще есть возможность взять размер напрямую из системных таблиц и это еще быстрей чем count(*).
      Ответить
      • А что, точно известно что выборка данных происходит сразу же? Или может только когда итерирование идет?
        Ответить
          • ну это как хотите, хотя я задал вопрос потому что не в теме, для расширения кругозора. Скажем в Django можно строить любые запросы, но пока не будут явно запрошены данные обращения к базе не будет. Вот я и подумал, а вдруг в PHP так же. Трудно поверить что в основном мануале такие явные антипаттерны.
            Ответить
          • все комменты на гк следует воспринимать, как троллинг
            Ответить
    • Там написано как работает данная функция, но не сказано, что надо дергать всю таблицу и юзать данную функцию только для того, чтобы узнать количество записей в таблице.
      Ответить

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

Переведи на "PHP", guest!

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


    8