0
votes

Here is a part of my query:

WHERE CASE $range WHEN 'ALL' THEN TRUE
      ELSE $this->table_alias.date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))
      END

Noted that $range is a php variable which contains a word. It throws this error message:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL WHEN 'ALL' THEN TRUE ELSE re.date_time > unix_timestam' at line 13 in C:\xampp\htdocs\myweb\others\users.php:120 Stack trace: #0 C:\xampp\htdocs\myweb\others\users.php(120): PDO->prepare('SELECT u.id use...') #1 C:\xampp\htdocs\myweb\others\questions.php(359): users->index(' AND categories...', ' INNER JOIN qan...', 'tagged') #2 C:\xampp\htdocs\myweb\others\users.php(26): questions->tagged('index') #3 C:\xampp\htdocs\myweb\application\other.php(24): users->index() #4 C:\xampp\htdocs\myweb\index.php(161): require_once('C:\xampp\htdocs...') #5 {main} thrown in C:\xampp\htdocs\myweb\others\users.php on line 120

Does anybody what's wrong?

1
Perhaps pursue this on the already open question? stackoverflow.com/questions/45468750/…ficuscr
$range is not quoted and is comparing to 'ALL'. There is most likely no column named ALL in the table.T Gray
What is $range? that supposed to be PHP variable? Doesn't seem to be a MySQL variable. T Gray, he is trying to do a string to string comparison.ficuscr
That case statement doesn't make sense.. What's wrong with the answer by @ficuscr on your other question?Aaron Dietz
@ficuscr As I've mentioned in the question $range is a PHP variable. So the final query looks like WHERE CASE ALL WHEN ALL THEN ....stack

1 Answers

1
votes

I think you used wrong syntax

$sql = "WHERE CASE 
    WHEN '{$range}' = 'ALL' THEN 1=1
    ELSE {$this->table_alias}.date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))
  END";