Как сохранить файл образа в 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 имеет уникальное имя файла.