【问题标题】:Quoting into Cypher queries using PHP (escaping a string)使用 PHP 引用 Cypher 查询(转义字符串)
【发布时间】:2015-10-06 06:43:09
【问题描述】:

我正在使用 PHP 和 neoxygen/neo4j-neoclient 来构建图形数据库并寻找一种方法来转义字符串,以便我可以安全地将它们引用到 Cypher 查询中。 我知道documentation on Cypher expressions,但我想知道是否有人已经用PHP(或者其他语言编写了这样的转义函数,以便我可以将它移植到PHP)?也许我可以使用已经存在的 PHP 转义函数,比如 MySQL?

编辑: 最后,如果有人正在寻找一种通过 sendCypherQueries 传递参数的方法,这里有一个示例:

$parameters = array(
    'key'=>'example',
);

$client->sendCypherQuery("MERGE (node {key:{key}})", $paramteres);

这相当于一个 Cypher 查询:

MERGE (node {key:'example'})

【问题讨论】:

    标签: php neo4j cypher neoxygen


    【解决方案1】:

    您所描述的潜在“注入”对于您未作为参数传递的所有变量都是可能的。

    因此,对于 Cypher 和 NeoClient,请务必始终将您的变量作为 sendCypherQuery 方法的第二个参数传递。

    附带说明,在 PHP 中,mysql_real_escape_string 自 PHP5.5.0 以来已过时,所以两年多以前。 这就是为什么你会使用 PDO 并传递变量作为查询参数。

    【讨论】:

    • 谢谢!我知道了。我不知道它已经过时了,事实上我自己一直在使用 PDO。无论如何,我想我应该打开自动完成功能,因为我不知道 sendCypherQuery 接受其他参数。这在您的 GitHub 页面上没有很好地记录。你能告诉我如何在查询中映射这些参数吗?
    • 在这个页面上,你有3篇文章的链接,这些文章是我在sitepoint上写的,有很多使用客户端neo4j.com/developer/php的例子
    【解决方案2】:

    {key} 语法已过时。请改用$key

    $client->sendCypherQuery('MERGE (node { key: $key })', [ 'key' => 'example' ]);
    

    【讨论】:

      猜你喜欢
      • 2013-06-12
      • 1970-01-01
      • 2014-10-02
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 2012-06-19
      相关资源
      最近更新 更多