$elements = $xpath->query(
"//message[(@sender ='".$from." and @receiver = '".$username."') or
(@receiver='unread' and @sender = '".$username."')]"
);
这段代码有什么问题?
我的xml文件中需要这样的SELECT data WHERE ((sender == from AND receiver = username)OR(sender == username AND receiver = from))
答案 0 :(得分:4)
请改用sprintf
。它不那么混乱,错误更容易被发现。
$query = sprintf(
'//message[
(@sender = "%1$s" and @receiver = "%2$s") or
(@receiver="unread" and @sender = "%2$s")
]',
$from,
$receiver
);
另外,请务必清理$from
和$receiver
以阻止XPath Injection attacks。
答案 1 :(得分:2)
在此部分之后,你错过了一个结束的单引号:
(@sender ='".$from."
你的一般方法没有错。
答案 2 :(得分:1)
您的代码存在的一个问题是您面临注入攻击。你真的相信$ from和$ username是简单的字符串吗?不是使用字符串连接构建查询,而是设置参数化查询(其中外部提供参数)更安全(也更快)。我不知道你使用的PHP API是否允许你这样做。