Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Конвертация текстовогополя в int для mysql

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
koras
Отправлено: 26 Августа, 2012 - 18:10:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 224
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




Я получаю от пользователя данные в ввиде текста, скажем '7734661464136' get запросом.
Мне необходимо конвертировать данные в int для того чтобы положить в базу.
Причина данной манипуляции в поиске, так как при большом объёме данных поиск по числовым типам на много быстрее чем по текстовым, если таблица содержит 2кк записей и более.

Я написал мини функцию, для разбора текстовой переменно и конвертации, но хотел спросить, может есть у кого-то готовое или другое решение данной траблы.

спс.

(Отредактировано автором: 26 Августа, 2012 - 18:11:57)

 
 Top
KingStar
Отправлено: 26 Августа, 2012 - 18:17:24
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




не получится, длина поля БД типа int максимальное 11 (-2147483648..2147483647) и 10 UNSIGNED (0..4294967295) для беззнакового целого

ну а если все же нужно, то

PHP:
скопировать код в буфер обмена
  1. $str = '7734661464136';
  2. $int = $str * 1;


-----
То что программа работает, не означает что она написана правильно!
 
 Top
koras
Отправлено: 26 Августа, 2012 - 18:22:30
Post Id



Частый гость


Покинул форум
Сообщений всего: 224
Дата рег-ции: Окт. 2009  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.     $str = '7734661464136';
  2.     $int = $str * 1;



Ечень жестоко ::biggrin24.gif:: мне стыдно )))

PHP:
скопировать код в буфер обмена
  1. // $get_id - получаем от пользователя
  2. preg_match_all('/([0-9]{1})/is', $get_id, $rgMatches);
  3. (int)$ints = 0;
  4. // переворачиваем массив
  5. $rgMatch  = array_reverse($rgMatches[0]);
  6.  foreach ($rgMatch as $key => $value) {
  7.                 switch ($value) {
  8.                         case '0':
  9.                                 $k = 0 ;
  10.                                 break;
  11.                         case '1':
  12.                                 $k = 1 ;
  13.                                 break;
  14.                         case '2':
  15.                                 $k = 3 ;
  16.                                 break;
  17.                         case '4':
  18.                                 $k = 4 ;
  19.                                 break;
  20.                         case '5':
  21.                                 $k = 5 ;
  22.                                 break;
  23.                         case '6':
  24.                                 $k = 6 ;
  25.                                 break;
  26.                         case '7':
  27.                                 $k = 7 ;
  28.                                 break;
  29.                         case '8':
  30.                                 $k = 8 ;
  31.                                 break;
  32.                         case '9':
  33.                                 $k = 9 ;
  34.                                 break;
  35.                         default:
  36.                                 $k = 0;
  37.                                 break;
  38.                 }
  39. (int) $l=1;
  40.  for ($i=0; $i < $key; $i++) {
  41.     $l *= 10;
  42.  }
  43.                 $ints   += ($k*$l);
  44.  }
  45.   var_dump($ints);
 
 Top
Мелкий Супермодератор
Отправлено: 26 Августа, 2012 - 18:26:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




KingStar,
0) есть 64-битный bigint и 64-битный PHP
1) 10 и 11, так понимаю, подразумеваете числа из объявления типа int(что-то)? Так вот, это что-то совершенно никак не влияет на хранение данных. Его использует, например, консольный клиент для красивой отрисовки результирующей таблицы.

koras, зачем? Всё равно отправлять в базу:
0) в составе SQL-запроса. СУБД, да и PHP, абсолютно без разницы, какого типа была переменная. СУБД всё равно сама будет разбирать строку запроса.
1) в составе серверного препарированного запроса - тип приведёт драйвер доступа (если указать ему тип, конечно. Иначе - см. п.1). Какой там тип у PHP опять же побоку и значения не имеет.
Развлекаловка может быть, только если вам понадобится 64-битные целые на 32-битном PHP и вам ни в коем случае нельзя будет допускать конвертации значения в int силами PHP, т.к. потеряете всё значение.


-----
PostgreSQL DBA
 
 Top
KingStar
Отправлено: 26 Августа, 2012 - 18:33:22
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




Мелкий я как бы в курсе про bigint Подмигивание, а вот про то, что оно не влияет - как-то сомневаюсь, что возможно занести число больше допустимого, все ровно примет вид того самого, максимально допустимого числа
(Добавление)
2147483647 и 4294967295 для UNSIGNED


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB