SQL查询加入Sessions变量后出现语法错误如何解决
问题原因与修复方案
问题根因:该语法错误由PHP双引号字符串的解析规则触发,你在双引号包裹的SQL语句中直接嵌入$_SESSION['login_user']时,数组索引的单引号会和SQL语句中包裹用户名的单引号提前闭合,导致代码解析失败,报错位置和你判断的完全一致。
修复方法
- 方法1:用大括号包裹会话变量,明确告诉PHP这是一个整体变量,避免引号冲突
$sql= "SELECT user.username,books.bid,name,authors,edition,approve,issue,issue_book.return FROM user inner join issue_book ON user.username=issue_book.username inner join books ON issue_book.bid=books.bid WHERE issue_book.approve !='' and issue_book.approve !='Yes' and username ='{$_SESSION['login_user']}' ORDER BY `issue_book`.`return` DESC";
- 方法2:提前将会话值赋值给独立变量,再插入到SQL语句中
// 提前提取登录用户名 $loginUser = $_SESSION['login_user']; $sql= "SELECT user.username,books.bid,name,authors,edition,approve,issue,issue_book.return FROM user inner join issue_book ON user.username=issue_book.username inner join books ON issue_book.bid=books.bid WHERE issue_book.approve !='' and issue_book.approve !='Yes' and username ='$loginUser' ORDER BY `issue_book`.`return` DESC";
安全提示:以上两种方案仅解决语法报错问题,直接把变量拼接进SQL语句存在SQL注入风险,生产环境请使用预处理语句绑定参数的方式拼接查询条件。
内容的提问来源于stack exchange,提问作者DJ Dog
相关产品推荐
相关产品推荐

