Mysql
 sql >> Database >  >> RDS >> Mysql

Come archiviare file .pdf in MySQL come BLOB usando PHP?

MODIFICATO DA AGGIUNGERE :il codice seguente è obsoleto e non funzionerà in PHP 7. Vedi la nota in fondo alla risposta per maggiori dettagli.

Assumendo una struttura di tabella di un ID intero e una colonna DATA BLOB e supponendo che le funzioni MySQL vengano utilizzate per interfacciarsi con il database, probabilmente potresti fare qualcosa del genere:

$result = mysql_query 'INSERT INTO table (
    data
) VALUES (
    \'' . mysql_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf')) . '\'
);';

Un avvertimento, tuttavia, la memorizzazione dei BLOB nei database non è generalmente considerata l'idea migliore in quanto può causare un rigonfiamento della tabella e presenta una serie di altri problemi ad esso associati. Un approccio migliore sarebbe spostare il file da qualche parte nel filesystem dove può essere recuperato e memorizzare il percorso del file nel database invece del file stesso.

Inoltre, l'uso di chiamate a funzioni mysql_* è sconsigliato poiché questi metodi sono effettivamente deprecati e non sono realmente costruiti pensando alle versioni di MySQL più recenti della 4.x. Dovresti invece passare a mysqli o PDO.

AGGIORNAMENTO :le funzioni mysql_* sono obsolete in PHP 5.x e sono RIMOSSI COMPLETAMENTE IN PHP 7! Ora non hai altra scelta che passare a un'astrazione del database più moderna (MySQLI, PDO). Ho deciso di lasciare intatta la risposta originale sopra per motivi storici, ma in realtà non la uso

Ecco come farlo con mysqli in modalità procedurale:

$result = mysqli_query ($db, 'INSERT INTO table (
    data
) VALUES (
    \'' . mysqli_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf'), $db) . '\'
);');

Il modo ideale per farlo è con le istruzioni preparate MySQLI/PDO.