mysql:9541
From: Shiro Ozawa <Shiro Ozawa <shiro@xxxxxxxxxx>>
Date: Mon, 07 Jun 2004 15:50:40 +0900
Subject: [mysql 09541] 画像データの登録に関する1064エラー
小澤と申します. 初めて投稿させて頂いております. 現在,WEB経由で画像をデータベースに登録するシステムを作成しています. 使用しているシステムは RedHat9 (kernel:2.4.20-8) httpd-2.0.40-21 php-4.2.2-17 mysql-3.23.54a-11 で,PHPとMySQLについてはデフォルトでインストールしてあります. まず手始めにとWEB経由で画像を登録するスクリプトの骨組みを,過去ログ [mysql 02349]を参考にして作成しました(本文文末にソースを添付). ソース中のImageDataフィールドはlongblobになっております. PHPの設定で送信ファイルサイズの最大値は2MBになっております. スクリプト作成後,まず数KBのGIFファイルのアップロード実行したところ,問 題なく登録できました. そこで,次に20KB程度のJPEGファイルのアップロードを試みたところ1064エラー( パースエラー)が出てしまい,データ登録に失敗しました. その後, ・データ読込を"r"→"rb"とした ・クエリー文作成を'".$Binary."'→'$Binary'とした を試しましたが,エラーは改善されませんでした. そこで今度は数KBのJPEG画像をアップロードしたところ,登録出来ました. PHP側の受け取り可能ファイルサイズは102400にしているので100KBまでですから, 20KBの画像でエラーが出るとは思えません. 試しにデータベースに登録せずに,そのままサーバのディスクに保存して表示す ることはできたので,やはりPHP側の問題では無さそうです. 一方で,MySQL側ではフィールドをlongblobにしているのでデータサイズが大き すぎるということは無いと思います. となると,addslashesを疑いたくなるのですが,小さいファイルでは問題なく登 録できているのでそれもできません. あれこれ調べたのですが,万策尽きた感があります. 原因として何が考えられますでしょうか? このMLの方々にお知恵を拝借できれば幸いです. よろしくお願い致します. ------------------------------------------------------------- img_up.php <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>UPLOAD</title> </head> <body> <?PHP if($_FILES["upfile"]["name"]==''){ //アップロード画面の表示 echo ' <form action="img_up.php" method="POST" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="102400"> <table border=1> <tr> <td>タイトル</td> <td><input type=text name=sub size="35" value=""></td> </tr> <tr> <td><b>コメント</b></td> <td><textarea name=com cols="48" rows="4" wrap=soft></textarea> </td> </tr> <tr> <td><b>添付File</b></td> <td><input type=file name=upfile size="35"></td> </tr> <tr><td colspan=2> <input type=submit value="送信する"><input type=reset value="リセット"> </td></tr></table></form> '; } else{ //アップロード処理 echo "アップロード情報<br>\n"; echo "<table border=1>\n"; echo "<tr><td>一時ファイル名</td><td>".$_FILES["upfile"]["tmp_name"]."</td></TR>\n"; echo "<tr><td>ファイル名</td><td>".$_FILES["upfile"]["name"]."</td></TR>\n"; echo "<tr><td>ファイルサイズ</td><td>".$_FILES["upfile"]["size"]."</td></TR>\n"; echo "<tr><td>MIMEタイプ</td><td>".$_FILES["upfile"]["type"]."</td></TR>\n"; echo "<tr><td>タイトル</td><td>".$_POST["sub"]."</td></TR>\n"; echo "</table>\n"; echo "<hr>"; //フィルタリング if($_FILES["upfile"]["size"]>102400){ echo ("ファイルサイズが大きすぎます\n"); } else{ //DBへの接続 $conn=mysql_connect("localhost","***","***"); if(!mysql_select_db("img_db",$conn)){echo ("データベースに接続できませんでした\n");} //ファイル処理 $tmpfile = $_FILES["upfile"]["tmp_name"]; $fp=fopen($tmpfile,"r"); $Binary=addslashes(fread($fp,filesize($tmpfile))); fclose ($fp); unlink($tmpfile); //DB登録 $query = "insert into img_db(ImageName,ImageData) values('".$_POST["sub"]."','".$Binary."');"; if(mysql_query($query)){ echo("データベースへの登録が完了しました<br>"); } else{ echo mysql_errno().": ".mysql_error(); echo ("<hr>"); echo("データベースへの登録に失敗しました"); } } } ?> </body> </html> ------------------------------------------------------------------------ -- Shiro Ozawa <shiro@xxxxxxxxxx>
-> 9541 2004-06-07 15:50 [Shiro Ozawa <shiro@x] 画像データの登録に関する1064エラー 9560 2004-06-07 23:04 ┗["KAWAI,Takanori" <GC] 9567 2004-06-08 09:30 ┗[Shiro Ozawa <shiro@x] 9582 2004-06-09 16:43 ┗[Shiro Ozawa <shiro@x]