如何在xpath查询中使用多个条件?

时间:2012-09-24 06:44:50

标签: php xml xpath

 $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))

3 个答案:

答案 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是否允许你这样做。