HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Песочница
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 17.03.2016, 11:07
user6334
Guest
Сообщений: n/a
Провел на форуме:
91312

Репутация: 12
По умолчанию

Не могу объяснить следующий корректный запрос:

Код:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?
 
Ответить с цитированием

  #2  
Старый 17.03.2016, 13:07
BabaDook
Guest
Сообщений: n/a
Провел на форуме:
238786

Репутация: 40
По умолчанию

Цитата:
Сообщение от user6334  
user6334 said:

Не могу объяснить следующий корректный запрос:
Код:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?
Пробел
 
Ответить с цитированием

  #3  
Старый 17.03.2016, 13:14
Waki
Guest
Сообщений: n/a
Провел на форуме:
19071

Репутация: 10
По умолчанию

Цитата:
Сообщение от user6334  
user6334 said:

Не могу объяснить следующий корректный запрос:
Код:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
Конечно, никакого пользователя blablabla в таблице нет, но запрос возвращает все записи. Что означает этот знак плюс?
такой запрос эквивалент запросу

Код:
Code:
SELECT * FROM `users` WHERE login = 0
+ в мускле оператор сложения

зы. плохо искал кстати, http://dev.mysql.com/doc/refman/5.7/...functions.html
 
Ответить с цитированием

  #4  
Старый 17.03.2016, 13:49
user6334
Guest
Сообщений: n/a
Провел на форуме:
91312

Репутация: 12
По умолчанию

Цитата:
Сообщение от BabaDook  
BabaDook said:

Пробел
Заменяем + на пробел, получаем:

Код:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' ''
На выводе ничего. Значит не пробел.
 
Ответить с цитированием

  #5  
Старый 17.03.2016, 13:57
user6334
Guest
Сообщений: n/a
Провел на форуме:
91312

Репутация: 12
По умолчанию

Цитата:
Сообщение от Waki  
Waki said:

такой запрос эквивалент запросу
Код:
Code:
SELECT * FROM `users` WHERE login = 0
+ в мускле оператор сложения
зы. плохо искал кстати,
http://dev.mysql.com/doc/refman/5.7/...functions.html
Про оператор сложения, это и так понятно )

Но, как понять login = 0 учитывая, что login имя пользователя, т.е. строчный тип

И почему запрос

Код:
Code:
SELECT * FROM `users` WHERE login = 0
возвращает всю таблицу, тогда как запрос

Код:
Code:
SELECT * FROM `users` WHERE login = 1
не возвращает ничего?
 
Ответить с цитированием

  #6  
Старый 17.03.2016, 14:05
Waki
Guest
Сообщений: n/a
Провел на форуме:
19071

Репутация: 10
По умолчанию

Цитата:
Сообщение от user6334  
user6334 said:

Про оператор сложения, это и так понятно )
Но, как понять login = 0 учитывая, что login имя пользователя, т.е. строчный тип
поле login преобразуется в integer, а там большинство строк будут равны 0
 
Ответить с цитированием

  #7  
Старый 17.03.2016, 14:29
user6334
Guest
Сообщений: n/a
Провел на форуме:
91312

Репутация: 12
По умолчанию

Цитата:
Сообщение от Waki  
Waki said:

поле login преобразуется в integer, а там большинство строк будут равны 0
С преобразованиями типов кажется разобрался ) Но так и не понял, почему запрос

Код:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + ''
или

Код:
Code:
SELECT * FROM `users` WHERE login = 'blablabla' + 'bebebe'
будет эквивалентен запросу

Код:
Code:
SELECT * FROM `users` WHERE login = 0
?

Может это из-за того, что знак плюс является арифметическим оператором, значит все, что он складывает приводиться к числовому типу?
 
Ответить с цитированием

  #8  
Старый 17.03.2016, 15:33
Alex_gan
Guest
Сообщений: n/a
Провел на форуме:
19303

Репутация: 4
По умолчанию

Правая часть из за сложения конвертирует оба слагаемых в цифры. Затем левую часть тоже пытается привести к числовому типу. Странно что при этом выдает результат, а не ошибку.

Оракл на такой же запрос ругается на несоответсвие типов и это логично.
 
Ответить с цитированием

  #9  
Старый 17.03.2016, 16:05
user6334
Guest
Сообщений: n/a
Провел на форуме:
91312

Репутация: 12
По умолчанию

Цитата:
Сообщение от Alex_gan  
Alex_gan said:

Правая часть из за сложения конвертирует оба слагаемых в цифры. Затем левую часть тоже пытается привести к числовому типу. Странно что при этом выдает результат, а не ошибку.
Оракл на такой же запрос ругается на несоответсвие типов и это логично.
В Оракл и MYSQL знак плюс используется кроме арифметического сложения еще и для конкатенации строк
 
Ответить с цитированием

  #10  
Старый 17.03.2016, 16:20
Alex_gan
Guest
Сообщений: n/a
Провел на форуме:
19303

Репутация: 4
По умолчанию

На счет мускула не скажу, а вот в Оракле конкатенация строк это ||. Если + когда то и использовался для этого то в каких то совсем уж древнючих версиях.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ