Save Image to mySQL and Retrieve Image?

Peter Haworth pete at lcsql.com
Mon Jun 8 18:44:55 EDT 2015


Hi John,

Couple of things.

In your call to revExecuteSQL, I think the variable name containing the
image data should be preceded by "*b".  I say I think because the
dictionary says to do that if it holds binary data but since you're base64
encoding it, I believe that results in only ASCII characters. Nevertheless,
you're putting it into a BLOB column ( I think) so maybe LC uses that as
its criteria rather than the actual contents of the variable, so:

revExecuteSQL tConID, tSQL,  "tDate", "tComment", "*btImage"

In your call to revDatabaseColumnNamed, timage needs to be in quotes:

get revDatabaseColumnNamed(tRecordSet, "image", "tImage")

Also, try checking the result after each call to makes sure no errors
occurred.  After the INSERT, it should contain 1 and after the
revDatabaseColumnNamed, it should be empty.

Also curious as to the reason for base64 encoding the data.  If you're
putting it into a BLOB column, it should accept binary data without a
problem.


Pete
lcSQL Software <http://www.lcsql.com>
Home of lcStackBrowser <http://www.lcsql.com/lcstackbrowser.html> and
SQLiteAdmin <http://www.lcsql.com/sqliteadmin.html>

On Mon, Jun 8, 2015 at 3:10 PM, JOHN PATTEN <johnpatten at me.com> wrote:

> Hi All,
>
> I have a a mobile app that takes a photo and POSTs the base64Encoded image
> to an .lc server script that saves it to a mySQL field.
>
> set the vis of templateImage to false
>    mobilePickPhoto "camera"
>    put the last image into img "imageHold"
>    put the text of image "imageHold" into tPhotoData
>    put base64Encode(tPhotoData) into tPhotoData
>    set the cImageData of img "ImageHold" to tPhotoData
>    reset the templateImage
>    put urlEncode(cd fld "comments") into $Comments
>   put the cImageData of img "imageHold" into tImage
>   put "comments=" & $Comments & "&image=" & tImage into tArgList
>   post tArgList to URL "http://servername.on-rev.com/ipad_1/add_image.lc”
>
> The .lc script:
> <?lc
> put revOpenDatabase ("mysql”,"servername.on-rev.com”,"servername_images”,"servername_images”,"password")
> into tConID
> put "images_data" into tTableName
>
> put $_POST["comments"] into tComment
> put the internet date into tDate
> put $_POST["image"] into tImage
>
> put "_date, comments, image" into tFields
>
>
> put "INSERT INTO" && tTableName && "(" & tFields & ") VALUES (:1, :2,
> :3);" into tSQL
>
> revExecuteSQL tConID, tSQL,  "tDate", "tComment", "tImage"
>
> revCloseDatabase tConID
> put empty
>
> ?>
>
> I can see that there is content in the fields in the table and BLOB field
> displays [BLOB - 64KiB]. So I’m assuming the image data is in the field.
>
> On the App I am queuing the db by record ID and trying to display the
> image from the DB.
>
>  put revOpenDatabase ("mysql","servername.on-rev.com","server_images","server_images","password")
> into tConID
>    put revQueryDatabase(tConID, "SELECT * FROM images_data WHERE _id=" &
> field "db_id" & ";") into tRecordSet
>    get revDatabaseColumnNamed(tRecordSet, "image", tImage)
>    put base64Decode(tImage) into tImage
>    set the text of image "db_image" to tImage
>    RevCloseCursor tRecordSet
>    revCloseDatabase tConID
>
>
> The image turns into a gray fill? No image. I seem to remember this
> happening in the past but can’t remember the solution?
>
> Thank you!
>
> John Patten
> SUSD
>
>
>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode



More information about the use-livecode mailing list