ラージオブジェクト (LOB) を参考に、
MySQLでmediumblob型の画像データが保存されているのですが、
うまく取得し表示することができません。
ログにはfpassthru()の第一引数にresouceではなくてstringが指定されていますと言われているので、
型変換みたいなのが必要なのでしょうか?
参考元のコメント欄を見ても同じエラーになった人がいるようです。
MySQL Workbench から登録したバイナリデータをダウンロードすると
正しく画像が表示されているので、登録時の処理には問題ないと思っています。
どこに問題があるのか指摘していただけませんでしょうか。
###ログ
Warning: fpassthru() expects parameter 1 to be resource, string given in /app/php/show_image.php
###ソース
show_image.php
php
1 $pdo = new PDO('mysql:*****'); 2 $stmt = $pdo->query("SELECT type, imgdat FROM test_table LIMIT 1"); 3 $stmt->bindColumn(1, $typ, PDO::PARAM_STR, 256); 4 $stmt->bindColumn(2, $dat, PDO::PARAM_LOB); 5 $stmt->fetch(PDO::FETCH_BOUND); 6 7 header("Content-Type: $typ"); 8 fpassthru($dat);
regist_image.php
php
1 $db = new PDO('mysql:*****'); 2 switch($_SERVER['REQUEST_METHOD']){ 3 case 'POST' : 4 if($_FILES['upImage']){ 5 $fp = fopen($_FILES["upImage"]["tmp_name"], "rb"); 6 7 $extension = pathinfo($_FILES["upImage"]["name"], PATHINFO_EXTENSION); 8 9 $stt1 = $db->prepare("INSERT INTO test_table ( imgdat, extension, error, type, size) select ?, ?, ?, ?, ?"); 10 $stt1->bindValue(1, $fp, PDO::PARAM_LOB); 11 $stt1->bindValue(2, $extension); 12 $stt1->bindValue(3, $_FILES["upImage"]["error"] ); 13 $stt1->bindValue(4, $_FILES["upImage"]["type"] ); 14 $stt1->bindValue(5, $_FILES["upImage"]["size"] ); 15 16 $db->beginTransaction(); 17 $stt1->execute(); 18 $db->commit(); 19 fclose($fp); 20 } 21 break; 22 23 default : 24 break; 25 $db = null; 26 } 27} catch (PDOException $e){ 28 die($e->getMessage()); 29}
TABLE
sql
1CREATE TABLE test_table ( 2 imgdat mediumblob , 3 extension varchar(5), 4 error int , 5 type varchar(50), 6 size varchar(50) 7);
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。