Speichern und Abrufen von Bildern aus MySQL-Datenbank mit PHP

Wenn wir eine Bilddatei in PHP hochladen, wird das hochgeladene Bild im Allgemeinen in einem Verzeichnis des Servers gespeichert und der entsprechende Bildname wird in der Datenbank gespeichert. Zum Zeitpunkt der Anzeige wird die Datei vom Server abgerufen und das Bild auf der Webseite gerendert. Wenn Sie jedoch nicht den Speicherplatz des Servers belegen möchten, kann die Datei nur in der Datenbank gespeichert werden. Sie können ein Bild hochladen, ohne die Datei mithilfe der MySQL-Datenbank physisch auf dem Server zu speichern. Es ist sehr einfach, Bilder aus der Datenbank mit PHP und MySQL zu speichern und abzurufen.

Wenn Sie sich Sorgen um den Serverplatz machen und freien Speicherplatz auf Ihrem Server benötigen, können Sie die Bilddatei direkt in die Datenbank einfügen, ohne sie in das Verzeichnis des Servers hochzuladen. Dieses Verfahren hilft bei der Optimierung des Serverspeicherplatzes, da der Inhalt der Bilddatei in der Datenbank und nicht auf dem Server gespeichert wird. In diesem Tutorial zeigen wir Ihnen, wie Sie Bilddateien in der MySQL-Datenbank speichern und Bilder mit PHP aus der Datenbank abrufen.

Bevor Sie mit der Integration des Datei-Uploads in die Datenbank beginnen, werfen Sie einen Blick auf die Dateistruktur.

store_retrieve_image_from_database/├── dbConfig.php├── index.php├── upload.php├── view.php└── css/ └── style.css

Bilddatei in MySQL einfügen

MySQL verfügt über einen BLOB-Datentyp (Binary Large Object), der eine große Menge binärer Daten enthalten kann. Der BLOB-Datentyp eignet sich perfekt zum Speichern von Bilddaten in der Datenbank. In MySQL stehen vier BLOB-Typen zur Verfügung – TINYBLOB, BLOB, MEDIUMBLOB und LONGBLOB. Der Datentyp LONGBLOB eignet sich perfekt zum Speichern der Bilddateidaten.

Datenbanktabelle erstellen

Zum Speichern des Dateiinhalts ist eine Tabelle in der Datenbank erforderlich. Die folgende SQL erstellt eine images -Tabelle mit dem Datentyp LONGBLOB in der MySQL-Datenbank.

TABELLE ERSTELLEN 'images` ( 'id' int(11) NOT NULL AUTO_INCREMENT, 'image' longblob NOT NULL, 'created' datetime NOT NULL DEFAULT current_timestamp(), PRIMARY KEY ('id`)) ENGINE=InnoDB STANDARDZEICHENSATZ=utf8 COLLATE=utf8_unicode_ci;

Datenbankkonfiguration (dbConfig.php)

Die dbConfig.php -Datei wird zum Verbinden und Auswählen der Datenbank verwendet. Geben Sie den Datenbankhost ($dbHost), den Benutzernamen ($dbUsername), das Kennwort ($dbPassword) und den Namen ($dbName) gemäß Ihren MySQL-Datenbankanmeldeinformationen an.

<?php 
// Database configuration
$dbHost = "localhost";
$dbUsername = "root";
$dbPassword = "root";
$dbName = "codexworld";
// Create database connection
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
// Check connection
if ($db->connect_error) {
die("Connection failed: " . $db->connect_error);
}

Formular zum Hochladen von Bildern

Erstellen Sie ein HTML-Formular mit einem Dateieingabefeld, um eine Bilddatei zum Hochladen auszuwählen. Stellen Sie sicher, dass das < – oder> -Tag die folgenden Attribute enthält.

  • Methode = „post“
  • enctype =“multipart / Formulardaten“
< formular Aktion ="hochladen.php" method="post" enctype="multipart / form-data"> <label>Bilddatei auswählen:</label> <eingabetyp = "Datei" name ="Bild"> < Eingabetyp = "senden" name ="senden" Wert = "Hochladen"></Formular>

Bilddatei in Datenbank speichern (Upload.php)

Die upload.php -Datei verarbeitet den Bild-Upload und das Einfügen der Datenbank.

  • Überprüfen Sie, ob der Benutzer eine Bilddatei zum Hochladen auswählt.
  • Rufen Sie den Inhalt der Bilddatei durch die tmp_name mit PHP file_get_contents() Funktion.
  • Fügen Sie den binären Inhalt des Bildes mit PHP und MySQL in die Datenbank ein.
  • Zeigt dem Benutzer den Status des Hochladens von Bildern an.
<?php 
// Include the database configuration file
require_once 'dbConfig.php';
// If file upload form is submitted
$status = $statusMsg = '';
if(isset($_POST)){
$status = 'error';
if(!empty($_FILES)) {
// Get file info
$fileName = basename($_FILES);
$fileType = pathinfo($fileName, PATHINFO_EXTENSION);
// Allow certain file formats
$allowTypes = array('jpg','png','jpeg','gif');
if(in_array($fileType, $allowTypes)){
$image = $_FILES;
$imgContent = addslashes(file_get_contents($image));
// Insert image content into database
$insert = $db->query("INSERT into images (image, created) VALUES ('$imgContent', NOW())");
if($insert){
$status = 'success';
$statusMsg = "File uploaded successfully.";
}else{
$statusMsg = "File upload failed, please try again.";
}
}else{
$statusMsg = 'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.';
}
}else{
$statusMsg = 'Please select an image file to upload.';
}
}
// Display status message
echo $statusMsg;
?>

Bild aus Datenbank abrufen (Ansicht.php)

In der view.php -Datei rufen wir den Bildinhalt aus der MySQL-Datenbank ab und listen ihn auf der Webseite auf.

  • Die Parameter data, charset und base64 im Attribut src werden verwendet, um Bildblobs aus der MySQL-Datenbank anzuzeigen.
<?php 
// Include the database configuration file
require_once 'dbConfig.php';
// Get image data from database
$result = $db->query("SELECT image FROM images ORDER BY id DESC");
?><?php if($result->num_rows > 0){ ?>
<div class="gallery">
<?php while($row = $result->fetch_assoc()){ ?>
<img src="data:image/jpg;charset=utf8;base64,<?php echo base64_encode($row); ?>" />
<?php } ?>
</div>
<?php }else{ ?>
<p class="status error">Image(s) not found...</p>
<?php } ?>

Laden Sie mehrere Bilder hoch und speichern Sie sie in der Datenbank mit PHP und MySQL

Fazit

Dieses Tutorial hilft Ihnen, die Datei-Upload-Funktionalität zu integrieren, ohne Dateien auf dem Server zu speichern. Sie können dieses Beispielskript verwenden, um & Bilder in die Datenbank hochzuladen, Bilder aus der Datenbank abzurufen und sie mit PHP und MySQL auf der Webseite anzuzeigen. Um den Bild-Upload-Prozess benutzerfreundlich zu gestalten, verwenden Sie jQuery, um Dateien mit Fortschrittsbalken mit Ajax und PHP hochzuladen.

Möchten Sie Implementierungshilfe erhalten oder die Funktionalität dieses Skripts ändern oder verbessern? Kostenpflichtige Serviceanfrage senden

Wenn Sie Fragen zu diesem Skript haben, senden Sie es an unsere QA-Community – Frage stellen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.