I store my images on disk, and record the image information in a table (tblImages).
I have a types table that I map image type to as well, but I don't know if you need that kind of functionality.
My favorite solution so far is to accept the upload, then generate a random 10 digit alphanumeric string for a filename. Then I check that the file doesn't already exist on disk, if it does, regenerate the filename.
Once the image with unique filename is stored to disk, create an entry in tblImages that has a unique ID, the filename on disk, image title, owner ID, category ID, etc. Depending on your implementation you can include whatever fields you need to associate the images table with other components in your project.
This way I can store all of my images in one directory, or have multiple directories with each dir dedicated to some module or application component that will always retrieve its images from that directory.
I don't like th eidea of saving images to the database, mostly for portability sake. Plus you can hotlink images on disk, but you need a script, permissions, anda query to pull an image from the database.