webentwicklung-frage-antwort-db.com.de

Wie kann ich Bilder aus einer MySQL-Datenbank mit PHP speichern und abrufen?

Wie kann ich ein Bild in MySQL einfügen und es dann mit PHP abrufen?

Ich habe in beiden Bereichen nur begrenzte Erfahrung, und ich könnte einen kleinen Code verwenden, um dies herauszufinden.

58
Mask

Zuerst erstellen Sie eine MySQL-Tabelle zum Speichern von Bildern, wie zum Beispiel:

create table testblob (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default ''
);

Dann können Sie ein Bild wie folgt in die Datenbank schreiben:

/***
 * All of the below MySQL_ commands can be easily
 * translated to MySQLi_ with the additions as commented
 ***/ 
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
mysql_connect("localhost", "$username", "$password");
mysql_select_db ("$dbname");
// mysqli 
// $link = mysqli_connect("localhost", $username, $password,$dbname); 
$sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
    /***
     * For all mysqli_ functions below, the syntax is:
     * mysqli_whartever($link, $functionContents); 
     ***/
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );
mysql_query($sql);

Sie können ein Bild aus der Datenbank auf einer Webseite anzeigen mit:

$link = mysql_connect("localhost", "username", "password");
mysql_select_db("testblob");
$sql = "SELECT image FROM testblob WHERE image_id=0";
$result = mysql_query("$sql");
header("Content-type: image/jpeg");
echo mysql_result($result, 0);
mysql_close($link);
121
Andomar

Anstatt Bilder in der Datenbank zu speichern, speichern Sie sie in einem Ordner auf Ihrer Festplatte und speichern Sie ihren Speicherort in Ihrer Datenbank.

22
Ankit Sharma

Beachten Sie, dass das Bereitstellen von Abbildern aus DB in der Regel sehr viel viel langsamer ist als das Bereitstellen von Abbildern von der Festplatte.

Sie starten einen Prozess PHP, öffnen eine DB-Verbindung, lassen die DB-Image-Daten von derselben Festplatte lesen und RAM für den Cache als Dateisystem, Übertragen über wenige Sockets und Puffer und anschließendes Pushen über PHP, wodurch es standardmäßig nicht zwischengespeichert werden kann und der Aufwand für die blockierte HTTP-Codierung erhöht wird.

Moderne Webserver von OTOH können Images mit nur wenigen optimierten Kernel-Aufrufen bereitstellen (speicherabgebildete Datei und der Speicherbereich, der an TCP Stack) übergeben wird), sodass sie nicht einmal Speicher herumkopieren und es fast keine gibt kein Overhead.

Das ist ein Unterschied zwischen der Möglichkeit, 20 oder 2000 Bilder gleichzeitig auf einem Computer bereitzustellen.

Also tu es nicht es sei denn, du brauchst unbedingt Transaktionsintegrität (und tatsächlich kann dies auch nur mit Image-Metadaten in DB- und Dateisystem-Bereinigungsroutinen durchgeführt werden) und weißt, wie man die PHP-Behandlung von HTTP verbessert, um geeignet zu sein für Bilder.

9
Kornel

ich empfehle auch, dies durchzudenken und dann Bilder in Ihrem Dateisystem statt in der DB zu speichern. Siehe hier: Speichern von Bildern in der DB - Ja oder Nein?

6
Scott Evernden

Meine Meinung ist, anstatt Bilder direkt in der Datenbank zu speichern, wird empfohlen, den Bildspeicherort in der Datenbank zu speichern. Da wir beide Optionen vergleichen, ist das Speichern von Bildern in der Datenbank aus Sicherheitsgründen sicher. Nachteil sind

  1. Wenn die Datenbank beschädigt ist, kann sie nicht abgerufen werden.

  2. Das Abrufen von Bilddateien aus der Datenbank ist im Vergleich zu anderen Optionen langsam.

Andererseits hat das Speichern des Speicherorts der Bilddatei in db die folgenden Vorteile.

  1. Es ist leicht zu finden.

  2. Wenn mehr als ein Bild gespeichert ist, können wir problemlos Bildinformationen abrufen.

6
Gunaseelan

Persönlich würde ich das Bild nicht in der Datenbank speichern, sondern es in einem Ordner ablegen, auf den von außen nicht zugegriffen werden kann, und die Datenbank verwenden, um den Standort zu verfolgen. Hält die Datenbankgröße niedrig und Sie können sie einfach mit PHP einbinden. Ohne PHP) gäbe es dann keine Möglichkeit, auf dieses Bild zuzugreifen

4
exussum