ユーザに画像をアップロードしてもらう際、保存先はディスクかDBかの議論が
よく行われますが、DBに保存する具体的なコードがなかなか見つけられなかったのでメモ
create.sql
create table image( id int not null auto_increment, img_data mediumblob )
img_upload.php
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS">
<TITLE>データベースへの画像の格納</TITLE>
</HEAD>
<P>ファイルのアップロード</P>
<FORM method="POST" enctype="multipart/form-data" action="img_upload.php">
<INPUT type="hidden" name="MAX_FILE_SIZE" value="65536">
画像のファイル名を入力してください(最大16MByte)
<INPUT size="30" type="file" name="upfile"><BR>
<BR>
<INPUT type="submit" name="submit" value="送信">
<INPUT type="reset" name="reset" value="リセット">
</FORM>
<?php
if ($_POST["submit"]!="")
{
if ($_FILES["upfile"]["tmp_name"]=="none")
{
print("ファイルのアップロードができませんでした。<BR>\n");
exit;
}
$fp = fopen($_FILES["upfile"]["tmp_name"], "rb");
if(!$fp)
{
print("アップロードしたファイルを開けませんでした");
exit;
}
$imgdat = fread($fp, filesize($_FILES["upfile"]["tmp_name"]));
fclose($fp);
print("ファイルサイズ:{$_FILES["upfile"]["size"]}<BR>\n");
$len = strlen($imgdat);
print("データ長 = $len<BR>");
$imgdat = addslashes($imgdat);
$con = mysql_connect("server_name", "user_id", "password");
if (!$con)
{
print("MySQLへの接続に失敗しました");
exit;
}
if (!mysql_select_db("db_name"))
{
print("データベースへの接続に失敗しました");
exit;
}
$sql = "INSERT INTO image(img_data) values('$imgdat')";
$result = mysql_query($sql);
if (!$result)
{
print("SQLの実行に失敗しました<BR>");
print(mysql_errno().": ".mysql_error()."<BR>");
exit;
}
$sql = "select max(id) from image";
$result = mysql_query($sql);
if (!$result)
{
print("SQLの実行に失敗しました<BR>");
print(mysql_errno().": ".mysql_error()."<BR>");
exit;
}
$row = mysql_fetch_row($result);
print("登録ID:" . $row[0]);
mysql_close($con);
unlink($_FILES["upfile"]["tmp_name"]);
}
?>
</BODY>
</HTML>
view.php
<?php
$id = intval($_GET['id']);
header("Content-Type: image/jpeg");
$con = mysql_connect("server_name", "user_id", "password");
if (!$con) {
print("MySQLへの接続に失敗しました");
exit;
}
if (!mysql_select_db("db_name")) {
print("データベースへの接続に失敗しました");
exit;
}
$sql = "select img_data from image where id = $id";
$result = mysql_query($sql);
if (!$result) {
print("SQLの実行に失敗しました<BR>");
print(mysql_errno().": ".mysql_error()."<BR>");
exit;
}
if (mysql_num_rows($result) == 0){
$sql = "select img_data from image where id = 1";
$result = mysql_query($sql);
if (!$result) {
print("SQLの実行に失敗しました<BR>");
print(mysql_errno().": ".mysql_error()."<BR>");
exit;
}
}
$row = mysql_fetch_row($result);
echo $row[0];
mysql_close($con);
?>
http://f41.aaa.livedoor.jp/~fujishin/img/view.php?id=2と、idで画像が取り出せます。
イメージタグに含んでもOK