Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: чудеса с crc32

Сообщения:  [1-10]   [11-16] 

 
 автор: Fractured#   (09.12.2009 в 17:43)   письмо автору
 
   для: Дмитрий Смаль   (09.12.2009 в 16:21)
 

> CRC32 влезает в INT только если UNSIGNED

Ну а теперь попробуй UNSIGNED на локальной машине юзать. В половине случаев 0 получать будешь.

  Ответить  
 
 автор: Fractured#   (09.12.2009 в 17:41)   письмо автору
 
   для: Trianon   (09.12.2009 в 16:07)
 

> Т.к. crc - это фактически набор бит, а не число, ему все равно чем быть представленным.

Хорошо, скажем по-другому: да, CRC32 влезет в 4 байта, а его представление влезет не во всякое поле.

  Ответить  
 
 автор: Дмитрий Смаль   (09.12.2009 в 16:21)   письмо автору
 
   для: Fractured#   (09.12.2009 в 15:05)
 

спасибо с этим вопросом разобрался

для трианона
CRC32 влезает в INT только если UNSIGNED, в ином случае если результат больше чем 2 милиарда с копейками, то в поле просто запишется максимальнодопустимое значения поля - сам проверял (в данном случае это было на сервере, все числа били со знаком +, на локале же были и со знаком -, тогда влазили все)

  Ответить  
 
 автор: Trianon   (09.12.2009 в 16:07)   письмо автору
 
   для: Fractured#   (09.12.2009 в 15:05)
 

В любой влезет.
Т.к. crc - это фактически набор бит, а не число, ему все равно чем быть представленным.
Префекционист, безусловно, поместит его в 32битовый беззнаковый тип, а не найдя такого - расстроится. Утверждаю, как краевед.
Но если сильно припрет, то даже он смирится со знаковым представлением.

Между прочим исторически crc32 представляют беззнаковой шестнадцатеричкой строкой, и не исключено, что такой вариант автора устроит сам по себе, тем паче, что все инструменты для него и php и в MySQL имеются.

  Ответить  
 
 автор: Fractured#   (09.12.2009 в 15:05)   письмо автору
 
   для: Дмитрий Смаль   (09.12.2009 в 13:53)
 

> вы имеете ввиду что результат crc32() по своей длине не влезет в BIGINT?

Я такого нигде не говорил и не имел ввиду. Результат CRC32 влезает в INT. Дело только в том какой INT — UNSIGNED или SIGNED.

  Ответить  
 
 автор: Fractured#   (09.12.2009 в 15:03)   письмо автору
 
   для: Trianon   (09.12.2009 в 13:24)
 

> скорее таковой на сервере

Почему? Если число отрицательное в одном — старший бит единица. В другом же случае это не старший бит, поэтому оно не отрицательное.

У автора наоборот — отрицательное на локальной машине, извиняюсь.

  Ответить  
 
 автор: Дмитрий Смаль   (09.12.2009 в 14:05)   письмо автору
 
   для: 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']."'"))

у меня вопрос не по поводу дырок в запросах к БД а по поводу числового индекса логина

  Ответить  
 
 автор: Trianon   (09.12.2009 в 14:00)   письмо автору
 
   для: Дмитрий Смаль   (09.12.2009 в 13:58)
 

Вот из за этого quote_smart(transform_html я вынужден заткнуться.

  Ответить  
 
 автор: Дмитрий Смаль   (09.12.2009 в 13:58)   письмо автору
 
   для: 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']))."'")) {

  Ответить  
 
 автор: Дмитрий Смаль   (09.12.2009 в 13:53)   письмо автору
 
   для: 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?

  Ответить  

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования