2016-05-24 3 views
0

Я новичок в php, html и mysql, поэтому извиняюсь за мой вопрос.Прочтите изображение blob из mysql и покажите его

Я загружаю изображение в mysql (эта часть работает нормально), Теперь я пытаюсь прочитать его и отобразить на моей странице.

Вот мой код, чтобы сохранить его в MySQL

echo "<br>file selected run script"; 
echo "<br>file name : ".$_FILES['userfile']['name']; 
echo "<br>file type : ".$_FILES['userfile']['type']; 
echo "<br>file size : ".$_FILES['userfile']['size']; 
$name = $_FILES['userfile']['name']; 
$type = $_FILES['userfile']['type']; 

$tmpName = $_FILES['userfile']['tmp_name']; 
echo "$tmpName"; 
$fp = fopen($tmpName, 'r'); 
$data = fread($fp, filesize($tmpName)); 
$data = addslashes($data); 
fclose($fp); 

$sql = "INSERT INTO images (image,name,type) 
VALUES ('$data','$name','$type')"; 
$conn->exec($sql); 

и работать. У меня есть HTML-файл с ним.

и loadimage.php является:

$ ID = filter_input (INPUT_GET, "Идентификатор", FILTER_SANITIZE_NUMBER_INT); попробовать {

/*** set the PDO error mode to exception ***/ 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    /*** The sql statement ***/ 
    $sql = "SELECT image,type FROM images WHERE id='$id'"; 
    echo $sql; 
      /*** prepare the sql ***/ 
    $stmt = $conn->prepare($sql); 

    /*** exceute the query ***/ 
    $stmt->execute(); 

    /*** set the fetch mode to associative array ***/ 
    $stmt->setFetchMode(PDO::FETCH_ASSOC); 

    /*** set the header for the image ***/ 
    $array = $stmt->fetch(); 

    /*** check we have a single image and type ***/ 
    if(sizeof($array) == 2) 
     { 
     /*** set the headers and display the image ***/ 
     header("Content-type:".$array['type']); 

     /*** output the image ***/ 
     echo $array['image']; 
     } 
    else 
     { 
     throw new Exception("Out of bounds Error"); 
     } 
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
catch(Exception $e) 
    { 
    echo $e->getMessage(); 
    } 
    } 

еще { эхо 'Пожалуйста, используйте реальный номер ID'; }

Он подключается к mysql, это не проблема.

Но хром консоль дает мне сообщение:

Ресурс интерпретирован как документ, но передается с MIME тип изображения/JPEG: «http://xxxxxxxxxxxxx/loadimage.php?id=12».

при попытке получить свой ID изображения: 12 (все изображения дают тот же результат ....)

+0

вы не используете чтобы вы были открыты для SQL-инъекций – cmorrissey

+0

** ПРЕДУПРЕЖДЕНИЕ **: При использовании PDO вы должны использовать [подготовленные заявления] (http://php.net/manual/en/pdo.prepared-statements.php) с помощью значения закладок и предоставлять любые пользовательские данные в качестве отдельных аргументов. В этом коде у вас есть потенциально серьезные [SQL-инъекции ошибок] (http://bobby-tables.com/). Никогда не используйте строчную интерполяцию или конкатенацию и вместо этого используйте [подготовленные заявления] (http://php.net/manual/en/pdo.prepared-statements.php) и никогда не ставьте данные '$ _POST' или' $ _GET' прямо в свой запрос. Обратитесь к [PHP The Right Way] (http://www.phptherightway.com/) для ознакомления с этой и другими проблемами. – tadman

ответ

0

Я понимаю, что и я буду решать, что, когда мой код будет работать actualy