[PR] この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。



PHPでMySQLにイメージを保存する

ユーザに画像をアップロードしてもらう際、保存先はディスクか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


もどる