Domanda

Come posso inserire un'immagine in MySQL e poi recuperarla usando PHP?

Ho un'esperienza limitata in entrambe le aree e potrei usare un piccolo codice per iniziare a capirlo.

È stato utile?

Soluzione

Per prima cosa crei una tabella MySQL per archiviare immagini, come ad esempio:

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 ''
);

Quindi puoi scrivere un'immagine nel database come:

/***
 * 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(

Per prima cosa crei una tabella MySQL per archiviare immagini, come ad esempio:

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 ''
);

Quindi puoi scrivere un'immagine nel database come:

$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);

È possibile visualizzare un'immagine dal database in una pagina Web con:

<*>FILES['userfile']['name']) ); mysql_query($sql);

È possibile visualizzare un'immagine dal database in una pagina Web con:

<*>

Altri suggerimenti

Invece di archiviare immagini nel database, archiviarle in una cartella sul disco e archiviarne la posizione nella base di dati.

Attenzione che la pubblicazione di immagini da DB è in genere molto, molto molto più lenta rispetto alla pubblicazione su disco.

Inizierai un processo PHP, aprendo una connessione DB, facendo in modo che il DB legga i dati delle immagini dallo stesso disco e RAM per la cache del filesystem, trasferendoli su pochi socket e buffer e poi spingendo fuori tramite PHP, che per impostazione predefinita lo rende non memorizzabile nella cache e aggiunge il sovraccarico della codifica HTTP in blocco.

I moderni server Web OTOH possono servire immagini con solo poche chiamate del kernel ottimizzate (file mappato in memoria e quell'area di memoria passata allo stack TCP), in modo che non copino nemmeno la memoria e quasi non ci sia sovraccarico.

Questa è una differenza tra la possibilità di servire 20 o 2000 immagini in parallelo su una macchina.

Quindi non farlo a meno che tu non abbia assolutamente bisogno dell'integrità transazionale (e in realtà anche questo può essere fatto con solo metadati di immagine in routine di pulizia di DB e filesystem) e sai come migliorare la gestione di HTTP da parte di PHP per essere adatto per le immagini.

Consiglio anche di pensarci su questo e poi di scegliere di memorizzare le immagini nel tuo file system piuttosto che nel DB .. vedi qui: Archiviazione di immagini in DB - Sì o No?

La mia opinione è, invece di archiviare le immagini direttamente nel database, si consiglia di memorizzare la posizione dell'immagine nel database. Confrontando entrambe le opzioni, l'archiviazione delle immagini nel database è sicura per motivi di sicurezza. Lo svantaggio è

  1. Se il database è danneggiato, non è possibile recuperarlo.

  2. Il recupero dei file di immagine da db è lento se confrontato con un'altra opzione.

D'altra parte, la memorizzazione della posizione del file immagine in db avrà i seguenti vantaggi.

  1. È facile da recuperare.

  2. Se sono memorizzate più immagini, possiamo recuperare facilmente le informazioni sull'immagine.

Personalmente non vorrei memorizzare l'immagine nel database, invece inserirla in una cartella non accessibile dall'esterno e utilizzare il database per tenere traccia della sua posizione. mantiene ridotte le dimensioni del database e puoi semplicemente includerlo utilizzando PHP. Non ci sarebbe modo senza PHP di accedere a quell'immagine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top