neo4j / Everyman - 如何传入字符串参数?

时间:2014-10-08 15:56:58

标签: php neo4j cypher

尝试传递参数的字符串值,如下所示:

$names = array( 'test0', 'test1', 'test2' );   
$q0 = "match (n:label0 { id: '{param0}'}) return n";
foreach( $names as $name )
{
    $q1 = new Everyman\Neo4j\Cypher\Query( $connection, $q0, array( 'param0' => $name );
    $r = $q1->getResultSet();

    echo( var_dump( $r ));
}

运行此代码会为我提供3个var_dump输出,但不会设置结果。如果我替换实际的param值(而不是从数组中获取),我得到了预期的结果集。同样,如果我使用Neo4j-shell输入查询,我会得到我期望的值。

那么我做错了什么?我确定我使用的不正确,但我不清楚如何。

我可以直接放入变量,查询也可以工作(尽管这可以抵消在查询中任何其他位置使用参数的任何可能的收益)。它只是通过一个看似有问题的参数来实现。


编辑:

  • neo4j v2.1.4

1 个答案:

答案 0 :(得分:0)

$q0 = "match (n:label0 { id: {param0}}) return n"; 

如果你这样做会怎么样?删除单引号?

您还可以将查询重写为:

并将整个字符串数组作为参数传递

$names = array( 'test0', 'test1', 'test2' );   
$q0 = "match (n:label0) WHERE n.id IN {param0} return n"; 
$q1 = new Everyman\Neo4j\Cypher\Query( $connection, $q0, array( 'param0' => $names );

确保create index on :label0(name)