Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование данных из hex string в string, преобразования значений типа 0х..... 
V
    Опции темы
Strafer
Дата 4.5.2008, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



В БД mysql есть таблица в 2 колонки в первой ID во второй логины, но логины хранятся в виде 
Код

--------------------
 `login_id` int(11) NOT NULL auto_increment,
  `logins` varchar(16) 
------------------------------------
(1,0x723532),
 (2,0x723235),
 (3,0x723032),
 (4,0x723137),
 (5,0x723136),
 (6,0x723430),
 (7,0x723036),
 (8,0x723332),
 (9,0x723333),
 (10,0x723139),
 (11,0x723237),
 (12,0x723138),
 (13,0x723130), 

когда пишу код типа
Код

$dbsearch = mysql_query("SELECT * FROM login", $db);
$tmplogin = mysql_fetch_array($dbsearch); 
if ($login === $tmplogin['logins'])

то if не выполняется т.к. $login содержит переменну типа string, к примеру test, а $tmplogin['logins'] в свою очередь содержит значение к примеру 0x723532
В манах по MySQL написано про 2 варианта HEX() или UNHEX(), но попытка написать нечто типа
Код

$dbsearch = mysql_query("SELECT * FROM login WHERE logins=HEX('$login')", $db);

безуспешна... а если написать такой запрос непосредственно в mysql то пишет Empty set
Подскажите пожайлуста решение данной проблемы
P.S. пытался поискать через гугль, но ничего не получилось(незнаю как сформировать вопрос)
PHP знаю на уровне прочтения книги "PHP для новичков"
PM MAIL ICQ   Вверх
skyboy
Дата 5.5.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Strafer @  4.5.2008,  22:46 Найти цитируемый пост)
содержит значение к примеру 0x723532

а откуда берется это значение?
CRC, hash какой-нибудь?
бесполезно решать задачу методом перебора, тем более, что упомянутая функция HEX применима к десятиричному числу, а не к произвольной строке.
Так что, пока не выяснишь, как формируется это самое "0x723532", наврядли у тебя получится выбрать нужное.
PM MAIL   Вверх
Strafer
Дата 5.5.2008, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



в доках к MySQL написано
Цитата

HEX(Ч_или_С)
Если Ч_или_С - число, возвращает строковое представление шестнадцатеричного значения N, где N - длинное целое (BIGINT). Это эквивалентно CONV(N,10,16).
Если Ч_или_С - строка, то возвращается шестнадцатеричная строка Ч_или_С, в которой каждый символ преобразован в два шестнадцатеричных разряда.

mysql> SELECT HEX(255);
-> 'FF'

mysql> SELECT HEX('abc');
-> '616263'


хотя это мне мало чем помогло, например
Код
 SELECT 0x723532
 возвращает строку(слово) и 
Код
 SELECT HEX('test')
 возвращает строку(слово), а 
Код
SELECT * FROM login WHERE logins=HEX('$login')
ничего не возвращает :(
Эти данные заносятся в БД с помощью Perl скрипта с использованием DBIx::ContextualFetch так что наверное это больше похоже на хеш.
Про HEX() и UNHEX() нашёл с помощью поисковика, может быть это неправильный подход, правда суть вопроса не меняется.

Это сообщение отредактировал(а) Strafer - 6.5.2008, 21:35
PM MAIL ICQ   Вверх
Feldmarschall
Дата 7.5.2008, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



охохох.
не хранится. а вставляется в таком виде.

ну нельзя писать, что  $tmplogin['logins'] содержит значение 0x723532 на основании умозаключений!
Граждане, это программирование! Вы имеете полную власть над программой.
поэтому не надо гадать
надо сделать просто echo $tmplogin['logins']
и убедиться, что в этой переменной лежит нормальная строка!


Это сообщение отредактировал(а) Feldmarschall - 7.5.2008, 09:28
PM   Вверх
Strafer
Дата 9.5.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 15.4.2008

Репутация: нет
Всего: нет



слова 
Цитата

надо сделать просто echo $tmplogin['logins']

считаю обидными ибо это первое что пришло мне в голову и сбило. Ошибку нашёл показав все другому человеку который трезвим взглядом увидел что при создании таблицы ошибочно написал
Код

CREATE TABLE login (
'login_id' ...................
'logins' VARCHAR(16) BINARY NOT NULL
....................
)

вот оно мне и писало логины в BINARY
спасибо за то что откликнулись и помогли
PM MAIL ICQ   Вверх
skyboy
Дата 9.5.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(Strafer @  9.5.2008,  21:31 Найти цитируемый пост)
вот оно мне и писало логины в BINARY

не находишь, что догадаться об этом было сложно - кода записи ты ведь не дал?  smile 
PM MAIL   Вверх
Feldmarschall
Дата 9.5.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 1
Всего: 32



Батюшки. И что же? Каким образом это binary мешало сравнивать строки в скрипте?

Добавлено через 46 секунд
skyboy, это BINARY не имеет вообще никакого отношения к вопросу. Это collation
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0484 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.