MySQLのBLOB型というやつとphpのgmp関連のメソッドを使う。
参考サイト
・BLOB型とTEXT型
・PHP: GMP 関数 - Manual
使用する上でやったことをいくつかメモ的に残しておく。
MySQL:BLOB型のデータを初期化する
バイナリデータを全部初期化したり、新しい行を挿入したりするときに使った。
BLOB型はデフォルト値が設定できないようなので、多分知らないと困る。
/*---------------------------------------------------------------------------*/
INSERT INTO hoge (blob_data) VALUES ("");
UPDATE hoge SET blob_data = "";
/*---------------------------------------------------------------------------*/
空の文字列を渡してやると、空のバイナリデータとして初期化される。
NULLを渡すと中身がNULLになるので注意。
PHP:BLOB型のデータを取得する
phpでデータを取得するときは、バイナリデータを文字列に変換。
さらにそれをgmpのデータに変換して取得する。
/*---------------------------------------------------------------------------*/
$gmpData = gmp_init(bin2hex($blobData), 16)
/*---------------------------------------------------------------------------*/
16進数のデータで受け取る例。他には10進数、8進数が使用可能。
まあ、基本16進数でいいやと思って試してはいない。
PHP:ビットを操作する
/*---------------------------------------------------------------------------*/
gmp_setbit($gmpData, $index, $set);
/*---------------------------------------------------------------------------*/
indexは調べたいビット。setはオンにするならtrue。オフにするならfalseを渡す。
PHP:ビットを取得する
/*---------------------------------------------------------------------------*/
gmp_testbit($gmpData, $index);
/*---------------------------------------------------------------------------*/
MySQL:PHPで操作したデータを更新する
取得したときとは逆に、16進数のデータに変換して、さらにバイナリに変換する。
/*---------------------------------------------------------------------------*/
$hex = gmp_strval($gmpData, 16);
$data = hex2bin($hex);
/*---------------------------------------------------------------------------*/
gmp_strvalで変換できる。
hex2binに渡すときは、文字列データの長さが偶数じゃないと起こられるので気をつけよう。
以上。思っていたより長くなった。
0 件のコメント:
コメントを投稿