MySQL where clause equals anything (SELECT * WHERE col = ANY_VALUE)

Better way to do this is first generate sql query from the parameter you need to bother on, and then execute.

function doQuery($params) {
    $query = 'SELECT * FROM mytable ';
    if (is_array($params) // or whatever your condition ) { 
        $query .= 'WHERE item = ' . $params[0];
    }
    $query .= ' ;';

    // execute generated query
    execute($query);
}

As far as I know, no such "any" placeholder exists.

If you can use LIKE, you could do

SELECT * FROM table WHERE item LIKE '%'

if you can append a condition, you could nullify the item clause like this:

SELECT * FROM table WHERE item = ? OR 1=1

(won't work in your example though, because you are passing "item" as a parameter)

That's all the options I can see - it's probably easiest to work with two queries, removing the WHERE clause altogether in the second one.

This would probably work, but I*m not sure whether it's a good idea from a database point of view.

public function doQuery($item = 'ANY_VALUE') {
  $query = "SELECT * FROM table WHERE item = ? OR 1 = ?";
  db->fetchAll($query,array($item, ($item == 'ANY_VALUE' ? 1 : 0))
  ...
}

Tags:

Mysql

Php