sql >> Databasteknik >  >> RDS >> Mysql

Hur lagrar man .pdf-filer i MySQL som BLOB-filer med PHP?

REDIGERAD FÖR ATT LÄGG TILL :Följande kod är föråldrad och fungerar inte i PHP 7. Se anteckningen längst ned i svaret för mer information.

Om du antar en tabellstruktur med ett heltals-ID och en kolumn för blob DATA, och förutsatt att MySQL-funktioner används för att gränssnitta med databasen, kan du förmodligen göra något så här:

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

En varning dock, att lagra blobbar i databaser anses i allmänhet inte vara den bästa idén eftersom det kan orsaka uppblåst bord och har ett antal andra problem förknippade med det. Ett bättre tillvägagångssätt skulle vara att flytta filen någonstans i filsystemet där den kan hämtas, och lagra sökvägen till filen i databasen istället för själva filen.

Det avråds också från att använda mysql_* funktionsanrop eftersom dessa metoder i praktiken är utfasade och egentligen inte är byggda med versioner av MySQL nyare än 4.x i åtanke. Du bör byta till mysqli eller PDO istället.

UPPDATERA :mysql_* funktioner är utfasade i PHP 5.x och är BORTTAGET HELT I PHP 7! Du har nu inget annat val än att byta till en modernare Databasabstraktion (MySQLI, PDO). Jag har bestämt mig för att lämna det ursprungliga svaret ovan intakt av historiska skäl men använder det faktiskt inte

Så här gör du det med mysqli i procedurläge:

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

Det ideala sättet att göra det är med MySQLI/PDO-förberedda uttalanden.



  1. infoga ett Unicode-tecken i databsae

  2. Så här fixar du "profilnamnet är inte giltigt" när du uppdaterar en e-postprofil för databas i SQL Server (T-SQL)

  3. Mysql Spatial index oanvänt

  4. kommaseparerade fält för att jämföra i mysql