[PHP-users 14794]画像データ格納時のエラー(文字化けのため再投稿)

Takemura takemura @ pch.ac.jp
2003年 4月 23日 (水) 09:35:07 JST


takemuraと申します。

"PHP-users 14778 画像データ格納時のエラー"
で文字化けしていましたので、ソースを追加して再度投稿させていただきます。

環境
Windows2000Server
php:php-4.3.1-win32.zip
DB:MySQL-3.23.56-win.zip

MySQLにBLOB型で画像を格納するため
insert文を実行して発生するエラーでつまずいています。

手順は以下のとおりです。
(1) 画像ファイルをアップロード(サイズは10KByte弱)
(2) アップロードしたファイルを開いて変数に格納
    (2)変数に格納されたデータのサイズをstrlen()で
    調べた結果とアップロードされたファイルサイズは一致しています
(3) 格納した変数をaddslashes関数で変換
(4) (3)で変換した値をBLOB型のフィールドへinsert

(4)で発生するエラーをmysql_error()で表示すると以下のような
 メッセージが表示されました。
 (文字化けすると困るのでnear以下の意味不明な文字は
  表示していません)
You have an error in your SQL syntax near

MySQLでは
create table image(
ID int not null primary key auto_increment,
img_data blob);
でテーブルを作成してあります。

Windows環境でPHPをバイナリでインストールしたことと
addslashes関数によるエンコードの結果に何か関係が
あるのか等と考えているのですがよくわかりません。
ちなみに、ソースは以下のとおりです。

<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">
画像のファイル名を入力してください(最大64KByte)
<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("localhost", "sample", "samppass");
  if (!$con)
  {
   print("MySQLへの接続に失敗しました");
   exit;
  }
  if (!mysql_select_db("sample"))
  {
   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;
  }
  mysql_close($con);
 }
?>
</BODY>
</HTML>

以上よろしくお願いします。

takemura@札幌



PHP-users メーリングリストの案内