Storing Images in Mysql Database

Tutorial Outline:
  1. Creating a Test Mysql Database
  2. Example php Database Function
  3. Explanation of Database Function
  4. Php Script to Load Images in Mysql Database
  5. Explanation of Image Script
See Also:
  1. How to Get Images Out of MySql Database
  2. PHP Manual "base64_decode()"
  3. PHP Manual "chunk_split()"
  4. PHP Manual "convert_uuencode()"
  5. PHP Manual "RFC 2045 section 6.8"

This tutorial covers a simple way to store images in a mysql database. The example scripts that I provide here are intended to show you how to get a single image into your database. It will be up to you to write other scripts using php loops -- and functions like:

Creating a Test Mysql Database

This tutorial includes a fictitious database and table. Lets call the database test_imgs with a single table called pictures.

id pics ext gender
1 retergfghfghterhgcfnt
jpg female
  1. "id" is primary, key, not null, and auto_increment
  2. "pics" blob not null
  3. "ext" is varchar(4) not null
  4. "gender" is varchar(7) not null
  5. Mysql defaults for everything else.
  6. Create a directory "test" for the scritps
  7. Practice script "test.php"

Example Php Database Function

First let's write a function to connect to the Mysql database

Explanation of Database Function

I named my function "database connect" for obvious reasons, then passed the following arguments:

  1. $db_host -- Database Host
  2. $db_user -- Database User Name
  3. $db_pw -- Database Password
  4. $db_name -- Database Name
  5. &$db_selected -- Passed by reference
  6. &$connection -- Passed by reference

Arguments 1 through 4 need no explanation. Five and six were passed by reference which allows me to retrieve the variable values outside the function. Comment out the "die()" functions when you are not troubleshooting your code.

Php Script to Load Images in Mysql Database

Now lets get down to the task of storing images in a mysql database.

Explanation of Image Script

Notice that I used "fopen(), fread(), and fclose()" to get the contents of "testpic.php" and store it in a variable -- $img.

Next, I take $img and run it through "base64_encode().Read about base64 here.

Finally, after a little SQL magic, I place the encoded data from my test picture into the database. Viola! Now I have a jpeg image stored in mysql. Make note that I made a point to record the file extension along with the picture itself. I will be using that information when I am ready to get images out of my sql database.

Author: D.Shaun Morgan