Бинарное преобразование

gloomen

Новичок
Бинарное преобразование

Всем привет!

Помогите пожалуйста, разобраться с задачей.
И так, в таблице table, есть ячейка info_hash (тип: blob, Атрибут: BINARY)
Пытаюсь запись туда значение в результате получаеться [BLOB - 19Байт]
т.е. 19 байтовое значение вместо 20 байтового
Хотя перед записью в таблицу print показывает 20 байтовой значение.
Может чё в наcтройках php.ini, хотя сейчас использую дефолтовые?????

Код:
$x = '566666666666666666623236666667777777777jkghkghhjkdsf';
$infohash = pack("H*", sha1($x));
print(bin2hex($infohash));
mysql_query("UPDATE table SET info_hash = $infohash WHERE id=2");
 

dimagolov

Новичок
gloomen, первый вопрос. а набуя тебе BLOB для хранения бинарной строки в 20 байт чем BINARY не подошел?
второй вопрос. тебя не учили, что строковые значения (а BLOB и BINARY к таким относится) нужно оборачивать в кавычки да еще и эскейпить чем-то вроде mysql_real_escape()?
 

Fortop

Новичок
ну и паковать sha1() нет никакого смысла.
у нее есть 2й необязательный параметр.
 

gloomen

Новичок
Спасибо, что откликнулись, а теперь по порядку:

1. Если начинаешь обёртывать в кавычке, то он просто вставляет переменную: ".$infohash."
2. Если использовать mysql_real_escape_string, то в ячейке будет храниться экранированное значение типа Zak's = Zak\'s
3. Использовать BINARY вместо BLOB нельзя, поскольку изначально заложенно программой, аналогично и с sha1().
4. infohash должен быть равен = 20 байт не больше и не меньше.


Может есть ещё какие нить варианты???
 

Wicked

Новичок
... or die(mysql_error())

-~{}~ 17.04.10 18:32:

$x = '566666666666666666623236666667777777777jkghkghhjkdsf';
$infohash = sha1($x);
mysql_query("UPDATE table SET info_hash = x'$infohash' WHERE id=2");
 

gloomen

Новичок
Автор оригинала: Wicked
$x = '566666666666666666623236666667777777777jkghkghhjkdsf';
$infohash = sha1($x);
mysql_query("UPDATE table SET info_hash = x'$infohash' WHERE id=2");
Вот так, вот заработало! Спасибо.

Вот только непонятно почему когда я преобразовываю в двоичный формат: $infohash = pack("H*", sha1($x));
А, затем вставляю в SQL: mysql_query("UPDATE table SET info_hash = $infohash WHERE id=2");
То, так, не работает.


Прокоментируйте пожалуйста.
 

Wicked

Новичок
mysql_query("UPDATE table SET info_hash = $infohash WHERE id=2") or die(mysql_error()), говорю же. Неужели ничего не выводит?
 
Сверху