I want to confirm the right approach of using try-catch exception handler.

I have written a query in a try block, and if any exception is thrown, it will execute a query in a catch block.

Is this the right way?

try {
    $query->fieldOrderBy($column_name, 'value', $sv1);
} catch (Exception $ex) {
    if (!empty($ex)) {
        $for_boolean = explode('boolean_', $column_name);
        $query->fieldOrderBy($for_boolean[1], 'value', $sv1);

1 Answer 1


Can I execute a query in a catch block of try-catch?

You can do (practically) whatever you want in a catch block. There is some ambiguity when returning from within catch/finally, but this is not the case here.

Is this the right way?

It depends on what are you trying to achieve. If when studying the business rules it makes sense to execute a given database query when something goes wrong in a specific case, then yes, this is the right way. For instance, one could imagine a case where an element is added to a database and if it fails because of an unique constraint, tries adding the same element after changing the problematic value.

In your case, it might make sense to order some data by something, if it fails, order by something else, and if it still fails, propagate the exception up the stack. Without any information about the domain, we couldn't possibly guess whether your approach is right or wrong.

Your code, on the other hand, looks problematic.

  1. Given the name of $query->fieldOrderBy, I expect it to return something: either the ordered items, or the number of affected rows. You don't use/check the return value. Why?

  2. What is $sv1? Is it actually the most explicit name you could give to the variable in a context of your business domain?

  3. Why do you catch (Exception $ex) instead of catching a more specific type of exception?

  4. Why if (!empty($ex))? What are you trying to achieve? What would be the case where catch block will be executed, but the condition will result in false?

  5. In $for_boolean = explode('boolean_', $column_name);, what if the column name doesn't contain boolean_?

  6. Before doing $for_boolean[1], you don't check that you actually have at least two elements.

  7. If you're dealing with an SQL database, you shouldn't specify the names of columns in variables: this will result in computed queries, which will ultimately lead to SQL Injection (and poor performance).

  • thanks a ton. I jss need to confirm whether one can execute query in cache block or not. Thanks.I got my answer. Commented Oct 20, 2015 at 10:42

Not the answer you're looking for? Browse other questions tagged or ask your own question.