I denne artikel vil jeg forklare hvordan man meget let, kan gemme filer i sin mysql database.

Det skal siges at det til normalt brug ikke kan anbefales at gemme filer i mysql, da php's egen fil-håndtering er meget bedre til sådanne opgaver. I nogle tilfælde vil metoden dog have sin berettigelse.

Forklaring: Man laver en form med en input af typen "file", og selvfølgelig en submit-knap. Når formen submittes, skal scriptet meget simpelt åbne filen, læse fil-koden ind i en variable, og tilsidst skrive det i et felt af typen 'blob', 'mediumblob' eller 'longblob' i databasen.

Kode:

<?php
// files in mysql by Jonas Delfs
// jonas at delfs dot dk
// http://delfs.dk

// CREATE TABLE files (
// id int(11) DEFAULT '0' NOT NULL auto_increment,
// file_code blob NOT NULL,
// file_size int(50) DEFAULT '0' NOT NULL,
// file_type varchar(50) NOT NULL,
// PRIMARY KEY (id)
// );

if ($form_data && $form_data != "none") {
    
$file_code addslashes(fread(fopen($form_data"r"), filesize($form_data)));
    
$connect mysql_connect("MYSQLSERVER","USERNAME","PASSWORD");
    
mysql_select_db("YOURDB",$connect);
    if (
mysql_query("insert into files (file_code, file_size, file_type) values ('$file_code', '$form_data_size', '$form_data_type')")) {
        echo 
"Your file is saved i the mysql-table 'files'";
    } else {
        echo 
"A problem occured, and the file hasn't been saved";
    }
}
echo 
'<form action="Filer_i_mysql.php" method="post" enctype="multipart/form-data">';
echo 
'Select file: <input type="file" name="form_data">';
echo 
'<input type="hidden" name="MAX_FILE_SIZE" value="1000000"><br>'//Defines max_file_size of files
echo '<input type="submit">';
echo 
'</form>';
?>


Det første du skal gøre, er at oprette den tabel der er lagt kode til ovenover. Så skal du tilpasse MYSQLSERVER, USERNAME samt PASSWORD OG YOURDB, og til sidst smide hele koden i en fil. Så skulle det spille! :)

Træk dataerne ud igen

Jeg går ud fra at du gerne vil trække dataerne ud igen, så til det skal vi bruge en seperat fil, som vi kalder file.php

Forklaring:

Først connecter vi til databasen. Så sender vi et simpelt query afsted, der henter fil-dataerne, og til sidst sætter vi de korrekte headers for den pågældende fil-type, og skriver fil-koden ud.

Kode:

<?php
// files in mysql by Jonas Delfs
// jonas at delfs dot dk
// http://delfs.dk

$connect mysql_connect("MYSQLSERVER","USERNAME","PASSWORD");
mysql_select_db("YOURDB"$connect);

$q mysql_query("SELECT file_code,file_type FROM files WHERE id='$id'") or die(mysql_error());
if (
mysql_num_rows($q)) {
    
extract(mysql_fetch_array($q));

    
header("Content-type: $file_type");
    echo 
$file_code;
} else {
    echo 
"404 - file not found!";
}
?>


Du kalder så en fil fra databasen med fx. file.php?id=1
Eller hvis det er et billede: <img src="file.php?id=1">

Håber du fandt artiklen nyttig! Jeg hører gerne fra dig hvis du mener der er fejl i artiklen!