Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
SQL прецедент
#1
Собственно, никогда ни сталкивался с подобным.

В базе храниться только одна запись:
tick=1(int), sum=80(int)

При запросе:
[SRC="sql"]"SELECT tick, sum FROM table WHERE tick=1 AND sum='80dasda';"[/SRC]

Он мне выкидывает эту запись! Как так? Понятное дело, что входящие данные я буду фильтровать, но как mySQL допускает такую ошибку? Запрос сделал напрямую через консоль mySQL и все равно выдает!

Т.е. как-будто он делает проверку "starthWith"

p.s. происходит такое только с типом данных int
Ответ
#2
привидение типа? если первое вхождение числа, а остальное не число, может отбрасываться
Ответ
#3
так понятней будет
PHP код:
<?php 
SELECT
* FROM `test` WHERE `tick` = 2 - '1dsadasd' and `sum` = 1 + '79sdasdasda'


а вот разница
PHP код:
<?php 
SELECT
* FROM `test` WHERE `tick` = 2 - '1dsadasd' and `sum` = 1 + 'a79sdasdasda'


авто приведение использует литерала строки к типу соответствующему поля

все работает как должно работать


если строка начинается с цифр, но при этом содержит другие символы, то при привидении, числом будет все цифры до первой не цифры.

PHP код:
<?php 
SELECT
* FROM `test` WHERE `tick` = 2 - '1dsadasd' and `sum` = 1 + '79sdasd2312312312asda131231'
Ответ
#4
Ну я так и понял, понял - что это нормально, но я не понимаю для чего это сделали.


P.S> Само программирование ведь такая вещь, если придумали, значит для чего-то, для какого-то случая.
Ответ
#5
Да кому нужна эта тупая типизация данных. Пхп наше все
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)