2007年05月17日

MYSQLに画像を入れる

現在画像のデータベースを作ってるのです。
やったことメモります。
ちなみにここら辺参考にしました。
http://q.hatena.ne.jp/1141838059

テーブル作成
画像自体を入れるフィールドはBLOB型にします。
今回はMEDIUMBLOBを使いました。

BLOB型についてはこんな感じ

TINYBLOB:TINYBLOB 255(28−1)
BLOB: 65,535(216−1)
MEDIUMBLOB: 16,777,215(224−1)
LONGBLOB: 4,294,967,295(232−1 )

テーブル挿入
BLOB型にバイナリ形式で画像を入れると出来上がりです。

PHPで作るとこんな感じ。

$query = "INSERT INTO pic (id,pic) values (".
$num.",". //ID
file_get_contents($_POST['pic1']).");";

まあSQL文書いただけですが。
コイツをMYSQLさんにぶち込みます。

file_get_contents($_POST['pic1']))

でPOSTで渡されたURLを読み込んで入れてます。

読み込み
画像読み込み専用スクリプトを作ります。

DB接続など色々やったあと


select * from pic where id=".$_GET['id']


をMYSQLさんにぶち込みます。


$db=DB::connect($dsn,$option);
$rs=$db->query("select * from pic where id=".$_GET['id'].";");
$row=$rs->fetchRow(DB_FETCHMODE_ASSOC);


こんな感じ。
ちなみにDB接続にPEAR関数使ってます。
詳細は書きません。

画像が取れたら。


header("Content-Type: image/jpeg");


でヘッダー出力します。
ヘッダーについては検索してください。
グーグルでの検索

最後に画像を出力します。


echo $row['pic'];


あとは読み込みたいところから


<img src=./pic.php?id=1>


で読みます。

以上です。
posted by のびた at 01:03| Comment(0) | TrackBack(2) | MYSQL | このブログの読者になる | 更新情報をチェックする

MYSQL文字化け対策

インストール直後だと高確率で日本語が化けます。

DB、TABLEのデフォルトの設定を変えることで解決。

初期設定だとたぶん以下のような感じになっている。
DEFAULT CHARACTER SET latin1

DB作成時は


CREATE DATABASE DB default character set utf8;


などとする(UTF-8の場合)

これからはUTF-8の時代らしいのでUTF-8を使ってます。
文字コードってめんどい。

ついでにテーブル作成も

CREATE TABLE DB.site (
`site_id` int(11) NOT NULL auto_increment,
`site_name` varchar(50) NOT NULL,
`form` varchar(50) NOT NULL,
`price` decimal(10,0) default NULL,
PRIMARY KEY (`site_id`)
) ENGINE=MyISAM default character set utf8;


な感じにする。

コレにたどり着くまでに1日かかった。
疲れた。

と思ったらSELECT時にまだ化けてやがる
たぶんmy.cnf?my.ini?の設定が悪いのでしょう。
そんなときは


SET CHARACTER SET UTF8;


をぶち込んでからSELECT文を入れると
上記の場合UTF8で取得できるみたいです。

試行錯誤ばっかりでいやだ。
MYSQLの本を買いました。





ちょっと大きいのですが見やすくて便利です。
困ったときに読んでます。
posted by のびた at 00:53| Comment(0) | TrackBack(0) | MYSQL | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。