繁体   English   中英

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

[英]How use multiple conditions in xpath query?

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

请改用sprintf 它不那么混乱,错误更容易发现。

$query = sprintf(
    '//message[
        (@sender = "%1$s" and @receiver = "%2$s") or
        (@receiver="unread" and @sender = "%2$s")
    ]',
    $from,
    $receiver
);

另外,请确保清理$from$receiver以防止XPath Injection攻击

您在此部分之后缺少右引号:

(@sender ='".$from."

您的一般方法没有错。

代码的问题之一是您将自己暴露于注入攻击。 您真的相信$ from和$ username是简单的字符串吗? 与使用字符串连接构建查询相比,建立一个参数化查询(其中将参数从外部提供)要安全得多(并且更快)。 我不知道您使用的PHP API是否允许您这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM