[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 メーリングリストの案内