MySQL 3/4 - com.mysql.jdbc.Driver And allowMultiQueries=true

Posted March 25, 2009 at 4:20 PM

Tags: ColdFusion, SQL

Just a quick note on configuring a MySQL JDBC Driver to allow multiple queries per CFQuery tag when using MySQL 3/4 (pre MySQL 5) on a ColdFusion 8 server. A few months ago, I leaned that you could add "allowMultiQueries=true" to the MySQL 5 connection string. However, today, I had to do some work on a ColdFusion MX 7 box that only had MySQL JDBC driver capabilities. I tried adding the allowMultiQueries to the connection string but this did not work.

After some Googling, I found that you have to add the allowMultiQueries=true to the actual JDBC Url, not the Connection String field:


 
 
 

 
Turning On Multiple Queries Using com.mysql.jdbc.Driver.  
 
 
 

I put that in and it worked nicely.

Post Comment  |  Ask Ben  |  Other Searches  |  Print Page




Learning ColdFusion 9 - ColdFusion 9 tutorials, samples, examples, demos

Reader Comments

Mar 25, 2009 at 4:33 PM // reply »
10 Comments

Make sure your queries are sanitized. Most SQL injection attacks use the ability to do multiple queries per connection.


Mar 25, 2009 at 4:35 PM // reply »
7,572 Comments

@Jules,

Most definitely.


Mar 25, 2009 at 4:35 PM // reply »
8 Comments

This is a setting which would be good to define always.

Depending on some of our projects we had to have on MySQL 5 definition too.

Thanks for sharing ...


Mar 25, 2009 at 9:38 PM // reply »
28 Comments

Maybe this is a dumb question, but I personally liked the thought that it only allowed one query at a time, and because of that much less worry about SQL injection.

Other then the convenience of writing multiple queries in a single cfquery tag, what are the benefits of doing that? A speed boost cause it pack multiple calls to the db into one?

I think it's a neat tip, but I guess I'd need to be convinced on why I'd actually do it.


Mar 25, 2009 at 9:40 PM // reply »
7,572 Comments

@Tim,

My biggest reason for using it is to create a new record and then immediately select the new auto-increment ID created using LAST_INSERT_ID(), or, in newer versions of MySQL, @@Identity.


Mar 26, 2009 at 5:40 AM // reply »
1 Comments

I try to use allowMultiQueries=true as less as possible, hence my default datasource for an application allows only one query at a time. If I need multiple queries for an app I define a second datasource and use it only where needed.

Question: What do folks think about LAST_INSERT_ID() and using it inside 1 cfquery. Is it safe? Or even inside 2 cfquery tags one after another? Would I need <cftransaction> or <cflock type="exclusive"> for that? I am not sure since I heard different opinions on that in the past.


Mar 26, 2009 at 8:25 AM // reply »
10 Comments

@Thilo Hermann,

My opinion on that is, to not use auto incrementing IDs - use UUIDs instead. But I'm sure Mr. Nadel is tired of that discussion =)


Mar 26, 2009 at 8:30 AM // reply »
7,572 Comments

@Thilo,

I have never had a problem with it and I find it to be saver than SELECT MAX(id).


Mar 26, 2009 at 8:30 AM // reply »
7,572 Comments

@Jules,

Ha ha, I never get tired of a good debate :)


Mar 27, 2009 at 2:52 PM // reply »
24 Comments

Try using UUID's as order ID's, and you'll have some pissed customers. :)


Mar 27, 2009 at 3:03 PM // reply »
10 Comments

@Will Tomlinson,
Use incremental IDs for order IDs and folks know how many orders were placed, and try to snoop on other orders.

Sorta like project/invoice and check numbers. My good client can see month to month how many other invoices I've generated besides theirs. And I can see how many checks they've written in the same amount of time.

There would be no security issues in using incremental IDs so long as your app is written correctly. But still, it's kinda like dropping your drawers.

For orders/tracking I use links in emails with the UUID.


Mar 27, 2009 at 3:49 PM // reply »
24 Comments

That's why I use a UUID in another field in the orders table - not as the PK ID.

Then I use the UUID in combination with the PK ID, for any viewing, editing, deletions, etc.

Now, my customer has a nice, short order ID, and UUID that prevents tampering.


Mar 27, 2009 at 4:33 PM // reply »
10 Comments

I'm confused by your method. Doesn't the client still have the PKID, and use it to gain access to order information? They could then still tamper with it - no?


Mar 27, 2009 at 5:20 PM // reply »
24 Comments

The UUID is used much like an unlock key. You need the UUID in order to do anything with the record.

No one can tamper with it because it's nearly impossible to guess someone's UUID.


Mar 27, 2009 at 9:07 PM // reply »
10 Comments

Yes, thats why I like it so much. So why bother with an auto incrementing ID?


Mar 27, 2009 at 10:58 PM // reply »
24 Comments

The incrementing ID is just for the customer to use. Sometimes they call to inquire about an order. They can give my client the four digit ID instead of some long UUID.


Mar 28, 2009 at 11:12 AM // reply »
3 Comments

Backend processing and the CLIENT can use the Auto PKID to simplify look-ups and processing... Such as a means of using @@identity or last insert id on the backend (as already mentioned) or a quick order lookup for the CLIENT... not to be confused with the consumer.

Unless it is in an authenticated section of your application, or you have taken other measures to thwart enumeration, you would never display any order information based on an auto incrementing PKID without combining it with something that ensures the user should be able to see it. Such as a UUID

Securing order information is of course only one scenario. I typically use a secondary UUID field in tables that hold file information for which I don't want the download links easily enumerated. The UUID is passed through the URL as a download key. So a file download link might look like...

http://thedomain.com/files/#fileID#/#downloadKey#

-or-

http://thedomain.com/files/?fileid=#fileID#&downloadKey=#downloadKey#

The where clause on the file lookup would simply be...

where fileID = <cfqueryparam etc... value="#url.fileID#" />
AND downloadKey = <cfqueryparam etc... value="#url.downloadKey#" />

Without the combination of both unique columns, the file record cannot be recovered.


Mar 29, 2009 at 7:54 PM // reply »
106 Comments

Could just use stored procedures and pass parameters off to them. Set the result returned to be the id you're looking for. You wouldn't have to run multiple queries in your cf pages then.


Mar 30, 2009 at 9:19 AM // reply »
7,572 Comments

@Gareth,

I could do that, but then I'd have to write stored procedures :)


Mar 30, 2009 at 9:22 AM // reply »
106 Comments

Have your DBA do it...his name's Ben too, right? :)


Mar 30, 2009 at 9:27 AM // reply »
7,572 Comments

@Gareth,

Ha ha ha, yeah, but he's sooo lazy.


Mar 19, 2010 at 7:26 PM // reply »
1 Comments

Thank you very much for this post. Adding allowMultiQueries="true" in context.xml didn't help until I added it to url as allowMultiQueries=true

Good idea is to use prepared statements and it will help you to avoid possible SQL injection.


Post Comment  |  Ask Ben

Recent Blog Comments
Mar 21, 2010 at 11:13 AM
A New Wrist Pain
@chiropractor suwanee, Spoken like someone trying to sell something. Other than for minor, temporary relief from some back pain, chiropractic treatment is nothing but placebo effect and quackery. ... read »
Mar 21, 2010 at 6:32 AM
ColdFusion CFPOP - My First Look
Apologies... The field name in the db for C. is "BounceCode" It stores the code / message which is returned in the email. Sorry for the confusion. ... read »
Mar 21, 2010 at 6:29 AM
ColdFusion CFPOP - My First Look
@Jose Galdamez, Hi Ben and Jose 1st of all.. big thanks to Jose for his Skype chat a few weeks back. Your time was much appreciated. I have come up with a rather unelegant solution to my problem a ... read »
Mar 21, 2010 at 3:42 AM
A New Wrist Pain
Chiropractic treatment is one of the best methods for treating numerous health problems naturally. After years of experience being a chiropractor, I have found that it is a powerful way to solve many ... read »
Mar 20, 2010 at 12:07 PM
Drawing On The iPhone Canvas With jQuery And ColdFusion
Simply awesome. Saved my day. ... read »
Mar 20, 2010 at 9:00 AM
Building A Fixed-Position Bottom Menu Bar (ala FaceBook)
I would like to say thx for an easy way to create a bottom bar. I do have a ?. Is it possible to center the bar if i want to resize it to ex 85%. Regards Offenbach ... read »
Mar 19, 2010 at 7:26 PM
MySQL 3/4 - com.mysql.jdbc.Driver And allowMultiQueries=true
Thank you very much for this post. Adding allowMultiQueries="true" in context.xml didn't help until I added it to url as allowMultiQueries=true Good idea is to use prepared statements and it will he ... read »
Jim
Mar 19, 2010 at 4:49 PM
Nobody Puts Baby In The Corner!
Wow. This is like suddenly finding a support group for your secret shame. I'm not alone! I always liked this movie, even though it is extremely cheesy. I just wish Jennifer Grey hadn't gotten the ... read »