@websiteserf

Насколько плохо, автоматическое приведение типов при записи в БД?

Пользуюсь PDO (режим эмуляции prepared отключен) для работы с бд.
Разберу на примере:
Допустим имеем строку, состоящую из цифр (string)"0123456789", надо ее записать в БД как INT. можно ли использовать функцию(собственную), которая автоматически приводит переменную в тот или иной тип? Или все же лучше использовать bindValue(':str', $str, PDO::PARAM_INT); ?
  • Вопрос задан
  • 216 просмотров
Решения вопроса 1
trevoga_su
@trevoga_su
Приведение типа переменной в PHP для последующей записи в БД не имеет смысла. Либо ты используешь prepared, либо формируешь строку запроса руками, соответственно число тоже будет представлено как строка.

Далее, на разных ОС и разных платформах PHP_INT_MAX различается. Т.е. приводить ТУПО строку к (int) - абсолютно не правильное решение. Если ты оперируешь большими числами, выходящими за пределы PHP_INT_MAX, то приведение к int просто урежет число. А числа, выходящие за пределы PHP_INT_MAX, PHP интерпретирует как числа с плавающей точкой.

Когда я писал свою обертку под mysql, то у меня возникла задача - проверять, является ли переменная числом, целым или с плавающей точкой.

В итоге получился вот такой код, который покрывает все тесты:

Определение integer: https://github.com/Vasiliy-Makogon/PHP-Class-to-sa...
Определение float: https://github.com/Vasiliy-Makogon/PHP-Class-to-sa...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Если в базе данных поле объявлено, как integer - туда и вставится integer.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы