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

Hvordan gemmer man .pdf-filer i MySQL som BLOB'er ved hjælp af PHP?

REDIGERET FOR TILFØJ :Følgende kode er forældet og virker ikke i PHP 7. Se noten nederst i svaret for flere detaljer.

Forudsat en tabelstruktur af et heltals-id og en blob DATA-kolonne, og forudsat at MySQL-funktioner bliver brugt til at interface med databasen, kunne du sandsynligvis gøre noget som dette:

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

Et ord af advarsel dog, lagring af klatter i databaser anses generelt ikke for at være den bedste idé, da det kan forårsage oppustet bord og har en række andre problemer forbundet med det. En bedre tilgang ville være at flytte filen et sted i filsystemet, hvor den kan hentes, og gemme stien til filen i databasen i stedet for selve filen.

Det frarådes også at bruge mysql_* funktionskald, da disse metoder effektivt er forældede og egentlig ikke er bygget med versioner af MySQL nyere end 4.x i tankerne. Du bør skifte til mysqli eller PDO i stedet for.

OPDATERING :mysql_* funktioner er forældet i PHP 5.x og er FJERNET HELT I PHP 7! Du har nu intet andet valg end at skifte til en mere moderne Database Abstraction (MySQLI, PDO). Jeg har besluttet at lade det originale svar ovenfor være intakt af historiske årsager, men jeg bruger det faktisk ikke

Sådan gør du det med mysqli i proceduretilstand:

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

Den ideelle måde at gøre det på er med MySQLI/PDO forberedte erklæringer.



  1. SQL fejl Jeg kan ikke finde ud af dette

  2. Anvendelse af kolonnetilladelser for en tabel over en trigger

  3. Hvordan $_POST en dynamisk tildelt værdi i PHP?

  4. Hvordan kontrolleres resultaterne af SSIS-pakkejob, efter at den har fuldført sin udførelse?