2
 $elements = $xpath->query(
   "//message[(@sender ='".$from." and @receiver = '".$username."') or
   (@receiver='unread' and @sender = '".$username."')]"
  );

这段代码有什么问题?SELECT data WHERE ((sender == from AND receiver = username)OR(sender == username AND receiver = from))我的 xml 文件中需要这样的东西

4

3 回答 3

4

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

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

此外,请确保清理$from$receiver防止XPath 注入攻击

于 2012-09-24T06:56:50.020 回答
2

在此部分之后,您缺少一个结束单引号:

(@sender ='".$from."

你的一般方法没有错。

于 2012-09-24T06:48:18.360 回答
1

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

于 2012-09-24T08:06:36.973 回答