以下是我的查询的一部分:
WHERE CASE $range WHEN 'ALL' THEN TRUE
ELSE $this->table_alias.date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))
END
注意$range
是一个包含单词的php变量。它抛出此错误消息:
致命错误:未捕获PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法出错;查看与您的MariaDB服务器版本相对应的手册,以便在“所有时间”附近使用正确的语法“#ALL;' ALL'那么真正的re.date_time> unix_timestam'在C:\ xampp \ htdocs \ myweb \ others \ users.php的第13行:120堆栈跟踪:#0 C:\ xampp \ htdocs \ myweb \ others \ users.php(120):PDO->准备(& #39; SELECT u.id使用...')#1 C:\ xampp \ htdocs \ myweb \ others \ questions.php(359):users-> index(' AND categories .. 。',' INNER JOIN qan ...','已标记')#2 C:\ xampp \ htdocs \ myweb \ others \ users.php(26):问题>标记('索引')#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}在C:\ xampp \ htdocs \ myweb \ others \ users中抛出。第120行的PHP
有人有什么不对吗?
答案 0 :(得分:1)
我认为您使用了错误的语法
$sql = "WHERE CASE
WHEN '{$range}' = 'ALL' THEN 1=1
ELSE {$this->table_alias}.date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))
END";