sql >> Database >  >> RDS >> Mysql

Hoe .pdf-bestanden in MySQL op te slaan als BLOB's met PHP?

BEWERKT OM TOEVOEGEN :De volgende code is verouderd en werkt niet in PHP 7. Zie de opmerking onderaan het antwoord voor meer details.

Uitgaande van een tabelstructuur van een geheel getal ID en een blob DATA-kolom, en ervan uitgaande dat MySQL-functies worden gebruikt om te communiceren met de database, zou u waarschijnlijk zoiets als dit kunnen doen:

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

Een woord van waarschuwing is echter dat het opslaan van blobs in databases over het algemeen niet als het beste idee wordt beschouwd, omdat het een opgeblazen gevoel kan veroorzaken en een aantal andere problemen met zich meebrengt. Een betere benadering zou zijn om het bestand ergens in het bestandssysteem te verplaatsen waar het kan worden opgehaald, en het pad naar het bestand in de database op te slaan in plaats van het bestand zelf.

Bovendien wordt het gebruik van mysql_*-functieaanroepen afgeraden, omdat deze methoden in feite zijn verouderd en niet echt zijn gebouwd met versies van MySQL die nieuwer zijn dan 4.x in gedachten. U moet in plaats daarvan overschakelen naar mysqli of PDO.

UPDATE :mysql_* functies zijn verouderd in PHP 5.x en zijn VOLLEDIG VERWIJDERD IN PHP 7! U heeft nu geen andere keuze dan over te stappen op een modernere Database Abstraction (MySQLI, PDO). Ik heb besloten om het oorspronkelijke antwoord hierboven intact te laten om historische redenen, maar gebruik het niet echt

Zo doet u het met mysqli in procedurele modus:

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

De ideale manier om dit te doen is met MySQLI/PDO voorbereide statements.



  1. Hoe onverwachte groei van SQL Server-database TempDB te detecteren en te voorkomen?

  2. MySQL voegt een NOT NULL-kolom toe

  3. Docker-container voor Postgres 9.1 stelt poort 5432 niet bloot aan host

  4. Inzicht in SQL Server LOCKS op SELECT-query's