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

    +165

    1. 1
    2. 2
    mysql_query("DELETE FROM tblTokens WHERE intRestaurantID = $id AND cToken = '$token';");
    mysql_query("INSERT INTO tblTokens (intRestaurantID, cToken) VALUES ($id, '$token');");

    Увеличиваем id, наверное.

    Запостил: 1101_debian, 03 Ноября 2011

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

    • что-что, какой UNIQUE? только скулинжекшн
      Ответить
      • с чего вы взяли, что $token не экранируется?
        Ответить
        • "не делайте никаких предположений". нужно использовать PDO
          Ответить
          • Лично мне и без PDO прекрасно живется.
            Не согласен ни с одним из ваших замечаний, моё мнение:
            - предположения делать можно
            - PDO - не панацея
            Ответить
            • - можно, но чревато ошибками. а вдруг случайно где-то что-то забыли заэкранировать? и тут начинается веселье.
              - экранирование и иную обработку данных удобнее всего (лучше читать НУЖНО) производить в том же месте (слое), где производится работа с ними. Т.е. для БД эскейпить нужно данные прямо перед запросом, а теги вырезать прямо перед выводом на экран.


              таким образом,
              - не портим данные, экранируя их в формат, допустимый в одном случае и недопустимый в другом
              - нет необходимости помнить, какие данные безопасны в текущем случае, а какие - нет
              - достигается некоторая универсальность и модульность.


              PDO, хоть и не лишен других недостатков, но эти преимущества содержит.
              рано или поздно вы все равно свой PDO напишете, но, скорее всего, менее мощный и безглючный.
              Ответить
              • Уже написал - не глючный ибо совсем минимальный :)
                Возможно, вы меня несколько не так поняли: я не против PDO, он мне нравится и я его использую в одних проектах и не использую в других. И там и там всё прекрасно (то, о чем я говорил). А еще есть mysqli::prepare - тоже использую. Просто хотел сказать, что на PDO свет клином не сошелся.
                Ответить
                • > на PDO свет клином не сошелся
                  в мире php как-то маловато хороших (удобных и быстрых) слоев абстракции над БД.

                  К слову, как-то приходилось сталкиваться с adodb - ну и хреень....
                  Ответить
                • от этих prepared statements все равно толку никакого нет, что мешает реализовать подобный функционал

                  $db->insert($table, $entry); где $entry массив, и в нём все строковые элементы автоматически эскейпется
                  Ответить
                  • это уже шаг к QueryBuilder, а там и до ORM недалеко
                    Ответить
                    • Я вот не вижу смысла использовать ORM зачем еще один уровень абстракции ?? $db->query($sql,$param); Вполне годно.
                      Ответить
                      • это пока сложность запросов не превышает ваш уровень мастерства в sql
                        Ответить
                        • Ну тогда тем более не нужен этот ORM. Все запросы сложные запросы в отдельные хранимые процедуры.
                          Ответить
                        • Как завещал нам медведь Балу из диснеевского "Маугли", "запросы должны быть простыми".
                          Ответить
          • Ну перепишет он:
            $pdo->query("DELETE FROM tblTokens WHERE intRestaurantID = $id AND cToken = '$token';");
            $pdo->query("INSERT INTO tblTokens (intRestaurantID, cToken) VALUES ($id, '$token');");

            Будет ли он счастлив?
            Ответить
    • может там триггер ещё
      Ответить
    • а если удаляемых рядом было/может быть несколько?
      Ответить
    • Ребят, предложите более вменяемый и компактный способ гарантированно вставить в таблицу единственную запись с уникальным набором значений некоторых полей. Заменив предыдущую (предыдущие) или вставив новую, если такой пока нет. Вне прочего контекста - языкового, проектного и т. п. Если контекст есть, то опишите его, а то неприкольно.
      Ответить
      • Консультировать пользователей PHP/MySQL еще более неприкольно.
        составной ключ, блеать
        Ответить
      • Как исключение. http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html Более носом тыкать не буду. Курить ман до полного просветления.
        Ответить

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