|
|
|
|
|
для: Дмитрий Смаль
(09.12.2009 в 16:21)
| | > CRC32 влезает в INT только если UNSIGNED
Ну а теперь попробуй UNSIGNED на локальной машине юзать. В половине случаев 0 получать будешь. | |
|
|
|
|
|
|
|
для: Trianon
(09.12.2009 в 16:07)
| | > Т.к. crc - это фактически набор бит, а не число, ему все равно чем быть представленным.
Хорошо, скажем по-другому: да, CRC32 влезет в 4 байта, а его представление влезет не во всякое поле. | |
|
|
|
|
|
|
|
для: Fractured#
(09.12.2009 в 15:05)
| | спасибо с этим вопросом разобрался
для трианона
CRC32 влезает в INT только если UNSIGNED, в ином случае если результат больше чем 2 милиарда с копейками, то в поле просто запишется максимальнодопустимое значения поля - сам проверял (в данном случае это было на сервере, все числа били со знаком +, на локале же были и со знаком -, тогда влазили все) | |
|
|
|
|
|
|
|
для: Fractured#
(09.12.2009 в 15:05)
| | В любой влезет.
Т.к. crc - это фактически набор бит, а не число, ему все равно чем быть представленным.
Префекционист, безусловно, поместит его в 32битовый беззнаковый тип, а не найдя такого - расстроится. Утверждаю, как краевед.
Но если сильно припрет, то даже он смирится со знаковым представлением.
Между прочим исторически crc32 представляют беззнаковой шестнадцатеричкой строкой, и не исключено, что такой вариант автора устроит сам по себе, тем паче, что все инструменты для него и php и в MySQL имеются. | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(09.12.2009 в 13:53)
| | > вы имеете ввиду что результат crc32() по своей длине не влезет в BIGINT?
Я такого нигде не говорил и не имел ввиду. Результат CRC32 влезает в INT. Дело только в том какой INT — UNSIGNED или SIGNED. | |
|
|
|
|
|
|
|
для: Trianon
(09.12.2009 в 13:24)
| | > скорее таковой на сервере
Почему? Если число отрицательное в одном — старший бит единица. В другом же случае это не старший бит, поэтому оно не отрицательное.
У автора наоборот — отрицательное на локальной машине, извиняюсь. | |
|
|
|
|
|
|
|
для: Trianon
(09.12.2009 в 14:00)
| | да ладно, quote_smart, transform_html - это функции которые убирают ненужные символы из логина
ну пусть будет $result = mysql_query ("SELECT * FROM user WHERE login_id=".crc32($_SESSION['login'])." AND login='".$_SESSION['login']."'"))
или пусть так
$result = mysql_query ("SELECT * FROM user WHERE login_id=".crc32($_POST['login'])." AND login='".$_POST['login']."'"))
у меня вопрос не по поводу дырок в запросах к БД а по поводу числового индекса логина | |
|
|
|
|
|
|
|
для: Дмитрий Смаль
(09.12.2009 в 13:58)
| | Вот из за этого quote_smart(transform_html я вынужден заткнуться. | |
|
|
|
|
|
|
|
для: Trianon
(09.12.2009 в 13:45)
| | то что индексы надо использовать при поиске в БД мне понятно
так же мне понятно что намного быстрее найти запись если индекс является числом
когда пользователь логинится, он вводит логин и пароль
получается что логин надо делать индексом и искать в базе
но когда пользователей несколько десятков а то и сотня тысяч, мне кажется что такой поиск будет грузить сервер, и поэтому я начал размышлять на тему того, что в БД хранить не только логин и пароль, а ещё цифровую запись, которая будет генерироваться из логина
и когда пользователь авторизируется, то запрос к БД будет не по логину как индексу, а цифровой записи, которая генерируется из логина.
типа вот так:
$result = mysql_query ("SELECT * FROM user WHERE login_id=".crc32($_SESSION['login'])." AND login='".quote_smart(transform_html($_SESSION['login']))."'")) { | |
|
|
|
|
|
|
|
для: Fractured#
(09.12.2009 в 13:17)
| | вы имеете ввиду что результат crc32() по своей длине не влезет в BIGINT?
вообще где можно узнать какая максимальная длина результата crc32()?
смотрел в википедии http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B8%D0%B7%D0%B1%D1%8B%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%B4
Name : CRC 32
Width : 32 - это длина 32 бита?
если так, то возможно стоит использовать
Name : CRC 16
Width : 16
P.S.
затупил, в пхп нету функции CRC 16
короче вопрос какая длина будет в CRC32 ()?
всегда ли результат влезет в поле BIGINT? | |
|
|
|
|