Gennady Feldman has put together a new post for his site today looking at a recent situation he had with validating SQL queries for use with an Oracle database.
So we got an interesting use case at work where we have an admin interface to setup filters in our system. Our staff is able to enter expressions in the web interface and we have a way of checking that whatever they enter is valid or not. While trying to optimize the validation code to do stricter checking with lower overhead I ran into a little gotcha. oci_parse() function doesn't actually do validation. This was a huge surprise to me and something I didn't grok.
Frustrated by the fact that the oci_parse function didn't seem to really do much more than bind variables and prepare the SQL for insert, he searched until he came across an interesting optional flag for oci_execute, OCI_DESCRIBE_ONLY. This flag returns some explain information by default and, if the query is invalid, returns an error.