I'm making a query dynamically like this:
$query = "SELECT u.*
FROM users u
WHERE date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))";
Also $range
contains a word like this:
switch ($_GET['range']){
case "week":
$range = "WEEK";
case "month":
$range = "MONTH";
case "year":
$range = "YEAR";
case "ALL":
$range = <I don't know what should I put here to get the expected result>;
}
As I've said above, I want to set something as $range
value to make the WHERE
clause something like WHERE 1
. How can I do that?
I would define an array with valid ranges and validate the user input first. Then build the query dynamicly.
Add datetime where clause conditionally;
WHERE 1=1
will always be true. So the next condition's result will matter on the final resultLet's start with the fact that your switch statement doesn't have break statements and isn't going to work the way you expect.
Here is what I'd suggest:
I think what Adam was suggesting is something like this:
Assume reporting with other criteria? Where the string concatenation gets messy. Adding 'AND' between parts. Suppressing WHERE keyword entirely? Where OOP code to represent the SQL query can be useful.
Perhaps use a case statement in your where clause?