PHPRad中使用rawQuery更新数据库行报PHP语法错误如何解决?
问题原因
你遇到的是PHP双引号字符串的变量解析语法错误:当在双引号包裹的字符串中直接使用带字符串键名的数组成员(比如$_COOKIE['Lat'])时,PHP解析器无法正确识别变量边界,就会抛出T_ENCAPSED_AND_WHITESPACE相关的语法错误。
另外你当前的写法还存在SQL注入风险:直接把用户可控的Cookie值拼入SQL语句,没有做参数绑定,容易被恶意构造的Cookie值攻击。
修复方案
最优方案:全参数绑定(推荐)
将Cookie取值也作为参数传入rawQuery,不要直接拼入SQL语句,同时可以把两次更新合并为一次执行,提升效率:
// 一次性更新两个字段,所有可变值全部走参数绑定 $params = array($_COOKIE['Lat'], $_COOKIE['Long'], $rec_id); $bool = $db->rawQuery("UPDATE drvmarkers SET lat = ?, lng = ? WHERE id = ?", $params);
这个方案同时解决了语法错误和SQL注入风险。
临时语法修复方案(不推荐,仅解决语法问题)
如果坚持要在SQL字符串内直接写Cookie变量,可以用大括号包裹变量明确边界:
// 仅修复语法,仍存在SQL注入风险 $params = array($rec_id); $bool = $db->rawQuery("UPDATE drvmarkers SET lat = {$_COOKIE['Lat']} WHERE id = ?", $params);
内容的提问来源于stack exchange,提问作者roffy miranda
相关产品推荐
相关产品推荐

