За последние 24 часа нас посетил 22721 программист и 1226 роботов. Сейчас ищут 742 программиста ...

MySQL режет буквенные символы

Тема в разделе "MySQL", создана пользователем feelz, 21 фев 2018.

Метки:
  1. feelz

    feelz Новичок

    С нами с:
    22 авг 2017
    Сообщения:
    10
    Симпатии:
    0
    Господа, доброго времени суток.
    Столкнулся с такой проблемой: если в запросе к базе есть буквенный символ - MySQL режет его и читает только цифры, соответственно, корректный запрос не проходит.

    Код (Text):
    1. $quered2 = mysqli_query($DB, "UPDATE `item_list` SET `QUANTITY` = `QUANTITY` - '".$_POST["quantity"]."' WHERE `ART` = ".$_POST["consumable"]);
    Здесь из поля с количеством, по логике, вычитается заданное количество. Если $_POST["consumable"] имеет в теле только цифры - запрос проходит, если же нет - уходит в молоко.
    Поле в колонке `ART` имеет тип varchar(20), то есть вроде бы ничто не должно мешать.

    Где-то читал, что у MySQL есть такая фишка - если мускул видит в запросе арифметический знак, то воспринимает аргументы как цифры и игнорирует прочие символы, но я не знаю, как это соотносится к данному случаю. Какие могут быть обходные пути?
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @feelz, просто число - это число. А строку (строковую константу) для mysql надо оборачивать в кавычки (одинарные... то есть - в апострофы :) ).
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    @feelz вы публичный проект делаете? уязвимость
     
  4. feelz

    feelz Новичок

    С нами с:
    22 авг 2017
    Сообщения:
    10
    Симпатии:
    0
    Поподробнее?
    Вообще нет, но интересуюсь.
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    вы внешние данные непосредственно заливаете в бд, без экранирования. Про sql-injection читали ?

    для безопасности используйте https://php.net/manual/ru/mysqli.prepare.php

    Но, если вам не удобно будет каждый раз прописывать многословность каждой функций, то порекомендую свою разработку(обвертку всего ада)
    https://github.com/MouseZver/Lerma
     
    Fell-x27 нравится это.
  6. feelz

    feelz Новичок

    С нами с:
    22 авг 2017
    Сообщения:
    10
    Симпатии:
    0
    Спасибо! Так просто - и все работает ))
    --- Добавлено ---
    Благодарю за наводку :)