Сохранение и отображение изображений из MySQL с помощью PHP

Как сохранить файл образа в MySQL с помощью PHP, отправив изображение из HTML-формы? Я знаю только часть MySQL и HTML.

Вот HTML-форма:

<form method="post" enctype="multipart/form-data" action="insert_image.php"> <input type="file" name="image" /> <input type="submit" /> </form> 

Я знаю, как подключиться к базе данных и хранить нормальную информацию, но как я могу правильно проанализировать данные для хранения файла изображения в поле BLOB MySQL? А также как я могу отобразить его из MySQL?

ps: Я использую PDO для подключения к базе данных.

 <?php # getting the uploaded image and storing it if ( isset($_FILES['image']['tmp_name']) ) { // open mysqli db connection $mysqli = new mysqli($mysqliHost,$mysqliUsername,$mysqliPassword,$mysqliDatabase); // get image data $binary = file_get_contents($_FILES['image']['tmp_name']); // get mime type $finfo = new finfo(FILEINFO_MIME); $type = $finfo->file($_FILES['image']['tmp_name']); $mime = substr($type, 0, strpos($type, ';')); $query = "INSERT INTO `images` (`data`,`mime`,`name`) VALUES('".$mysqli->real_escape_string($binary)."','".$mysqli->real_escape_string($mime)."','".$mysqli->real_escape_string($_FILES['image']['name'])."')"; $mysqli->query($query); } # viewing the uploaded image if ( isset($_GET['imageName']) ) { // open mysqli db connection $mysqli = new mysqli($mysqliHost,$mysqliUsername,$mysqliPassword,$mysqliDatabase); // query for the image in the db $query = "SELECT `data`,`mime` FROM `images` WHERE `name`='".$mysqli->real_escape_string($_GET['imageName'])."'"; $result = $mysql->query($query); if ( $result->num_rows ) { // grab the query result from the db select $assoc = $result->fetch_assoc(); // let the client browser know what type of data you're sending header('Content-type: '.$assoc['mime']); // dump the binary data to the browser echo $assoc['data']; exit; } else { header('HTTP/1.1 404 Not Found'); exit; } } ?> 

Мой сценарий не учитывает изображения с тем же именем, вы можете поменять часть, где она говорит $ _FILES ['image'] ['name'] другой переменной, которая имеет / создает для нее уникальное имя или использует вставленную ID (ключ PRIMARY AUTO_INCREMENT MySQL).

Вот пример схемы таблицы:

 CREATE TABLE `images` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `data` longblob NOT NULL, `mime` varchar(50) NOT NULL, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`), KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 

Это то же самое для всего, что вы храните в базе данных: захватите байты, которые вы хотите сохранить, и избегайте их при добавлении их в строку запроса.

Это похоже на:

 $image = file_get_contents($image_file_name); $query = "INSERT INTO img SET image = \"".mysqli_real_escape_string($image)."\""; 

На самом деле лучшие практики говорят, что вам нужно сохранить изображение в какой-то папке и сохранить путь или имя в базе данных.

это может помочь вам: http://www.htmlgoodies.com/beyond/php/article.php/3877766/Web-Developer-How-To-Upload-Images-Using-PHP.htm

Сохранение изображения с URL-адреса PHP

Вы можете получить исходное содержимое загруженного файла изображения с помощью file_get_contents , сбежать от него, а затем сохранить его в БД как blob. Чтобы отобразить его, вы можете просто отбросить blob после установки соответствующего типа содержимого.

Однако я бы так не сделал. Вместо этого я бы сохранил изображение на диске и сохранил местоположение файла изображения в MySQL.

Лично, когда я создал сайт, который нуждался в чем-то подобном ( этот сайт ), я сохранил файлы в файловой системе и добавил каталог в базу данных, гарантируя, что каждый jpg имеет уникальное имя файла.