MYSQL is utilized for creating database for websites and web applications. With its amazing performance, dependability and usability, MySQL has become best database option for web applications. It is freely accessible and simple to install. When the user uploads a file and tap on the upload button, the data is submitted to the server. PHP now takes the file and saves it in a folder in the project. Afterwards, it saves the text in the database together with a link pointing to the image in the folder. Now the biggest question is that how to upload files to MySQL database using PHP? Let’s learn.
Phase 0: Creating A Database
The process of creating database is easy. One table with a Binary large object (BLOB) field for the file data and some fields for different pieces of information relating to the file:
1. CREATE TABLE `file` (
2. `id` Int Unsigned Not Null Auto_Increment,
3. `name` VarChar(255) Not Null Default Untitled.txt,
4. `mime` VarChar(50) Not Null Default text/plain,
5. `size` BigInt Unsigned Not Null Default 0,
6. `data` MediumBlob Not Null,
7. `created` DateTime Not Null,
8. PRIMARY KEY (`id`)
9. )
10.
As you see, a file is stored by their, including the extension. We have the mime type, which is used to let the browser know what kinds of file are dealing with. us The size of the file in bytes. And finally the data itself, in a MediumBlob field.
Phase 1: Uploading The File
Now, there is need to get the file from the user. The table we designed does not want further information from the user. So, we will make this easy and create a HTML form with only a single "file" input field and a submit button:
1. <!DOCTYPE html>
2. <head>
3. <title>MySQL file upload example</title>
4. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
5. </head>
6. <body>
7. <form action="add_file.php" method="post" enctype="multipart/ form-data">
8. <input type="file" name="uploaded_file"><br>
9. <input type="submit" value="Upload file">
10. </form>
11. <p>
12. <a href="list_files.php">See all files</a>
13. </p>
14.</body>
15.</html>
Now look at the above mentioned code and you can see the third attribute of the <form> element, "enctype". This tells the browser how to send the form data to the server. As it is, when sending files, this require to be set to "multipart/form-data".
In the event that it is set any other way, or not set at all, your file is presumably not going to be transmitted accurately.
Phase 2: Add The File To The Database
As you can see in phase 1, we set the action property to "add_file.php". This is the file we are going to build it this phase of the process.
This file needs to check if a file has been uploaded, ensure that it was uploaded without errors, and add it to the database:
1. <?php
2. // Check if a file has been uploaded
3. if(isset($_FILES[uploaded_file])) {
4. // Make sure the file was sent without errors
5. if($_FILES[uploaded_file][error] == 0) {
6. // Connect to the database
7. $dbLink = new mysqli(127.0.0.1, user, pwd, myTable);
8. if(mysqli_connect_errno()) {
9. die("MySQL connection failed: ". mysqli_connect_error());
10. }
11.
12. // Gather all required data
13. $name = $dbLink->real_escape_string($_FILES[uploaded_file] [name]);
14. $mime = $dbLink->real_escape_string($_FILES[uploaded_file] [type]);
15.$data=$dbLink->real_escape_string(file_get_contents($_FILES [uploaded_file][tmp_name]));
16. $size = intval($_FILES[uploaded_file][size]);
17.
18. // Create the SQL query
19. $query = "
20. INSERT INTO `file` (
21. `name`, `mime`, `size`, `data`, `created`
22. )
23. VALUES (
24. {$name}, {$mime}, {$size}, {$data}, NOW()
25. )";
26.
27. // Execute the query
28. $result = $dbLink->query($query);
29.
30. // Check if it was successful
31. if($result) {
32. echo Success! Your file was successfully added!;
33. }
34. else {
35. echo Error! Failed to insert the file
36. . "<pre>{$dbLink->error}</pre>";
37. }
38. }
39. else {
40. echo An error occurred while the file was being uploaded.
41. . Error code: . intval($_FILES[uploaded_file] [error]);
42. }
43.
44. // Close the mysql connection
45. $dbLink->close();
46. }Now, using this summary as a guide, lets start writing our program.
Phase 3: Listing All Existing Files
So, now that here is few of files in our database, we have to make a list of files and link them so they can be downloaded:
1. <?php
2. // Connect to the database
3. $dbLink = new mysqli(127.0.0.1, user, pwd, myTable);
4. if(mysqli_connect_errno()) {
5. die("MySQL connection failed: ". mysqli_connect_error());
6. }
7.
8. // Query for a list of all existing files
9. $sql = SELECT `id`, `name`, `mime`, `size`, `created` FROM `file `;
10.$result = $dbLink->query($sql);
11.
12.// Check if it was successful
13.if($result) {
14. // Make sure there are some files in there
15. if($result->num_rows == 0) {
16. echo <p>There are no files in the database</p>;
17. }
18. else {
19. // Print the top of a table
20. echo <table width="100%">
21. <tr>
22. <td><b>Name</b></td>
23. <td><b>Mime</b></td>
24. <td><b>Size (bytes)</b></td>
25. <td><b>Created</b></td>
26. <td><b> </b></td>
27. </tr>;
28.
29. // Print each file
30. while($row = $result->fetch_assoc()) {
31. echo "
32. <tr>
33. <td>{$row[name]}</td>
34. <td>{$row[mime]}</td>
35. <td>{$row[size]}</td>
36. <td>{$row[created]}</td>
37. <td><a href=get_file.php? id={$row[id]}>Download</a></td>
38. </tr>";
39. }
40.
41. // Close table
42. echo </table>;
43. }
44.
45. // Free the result
46. $result->free();
47.}
48.else
49.{
50. echo Error! SQL query failed:;
51. echo "<pre>{$dbLink->error}</pre>";
52.}
53.
54.// Close the mysql connection
55.$dbLink->close();
56.?>
Phase 4: Downloading A File
To truly see how this functions, you should see how your browser downloads documents. When a browser asks for a file from an HTTP server, the server reaction will incorporate information on what precisely it contains. These bits of information are called headers. The headers ordinarily incorporate information on the sort of data being sent, the size of the reaction, and in case of files, the name of the file.
Now, this code. We begin simply by reading the ID sent by the link in phase 3. If the ID is valid, we fetch the information on the file whose ID we received, send the headers, and finally send the file data:
1. <?php
2. // Make sure an ID was passed
3. if(isset($_GET[id])) {
4. // Get the ID
5. $id = intval($_GET[id]);
6.
7. // Make sure the ID is in fact a valid ID
8. if($id <= 0) {
9. die(The ID is invalid!);
10. }
11. else {
12. // Connect to the database
13. $dbLink = new mysqli(127.0.0.1, user, pwd, myTable );
14. if(mysqli_connect_errno()) {
15. die("MySQL connection failed: ". mysqli_connect_error ());
16. }
17.
18. // Fetch the file information
19. $query = "
20. SELECT `mime`, `name`, `size`, `data`
21. FROM `file`
22. WHERE `id` = {$id}";
23. $result = $dbLink->query($query);
24.
25. if($result) {
26. // Make sure the result is valid
27. if($result->num_rows == 1) {
28. // Get the row
29. $row = mysqli_fetch_assoc($result);
30.
31. // Print headers
32. header("Content-Type: ". $row[mime]);
33. header("Content-Length: ". $row[size]);
34. header("Content-Disposition: attachment; filename =". $row[name]);
35.
36. // Print data
37. echo $row[data];
38. }
39. else {
40. echo Error! No image exists with that ID.;
41. }
42.
43. // Free the mysqli resources
44. @mysqli_free_result($result);
45. }
46. else {
47. echo "Error! Query failed: <pre>{$dbLink- >error}</pre>";
48. }
49. @mysqli_close($dbLink);
50. }
51.}
52.else {
53. echo Error! No ID was passed.;
54.}
55.?>
Final Words
So, you can see file uploading process is not complex as we think. Simply think about the above-mentioned steps, and you can easily upload any kind of file in Mysql database using PHP.
Author bio: Morris Edwards is Web developer & Marketing strategist at Awebstar - A leading web design & development company in singapore. They have built over 400+ Professional & ecommerce websites for their worldwide clients.