尝试传递参数的字符串值,如下所示:
$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输入查询,我会得到我期望的值。
那么我做错了什么?我确定我使用的不正确,但我不清楚如何。
我可以直接放入变量,查询也可以工作(尽管这可以抵消在查询中任何其他位置使用参数的任何可能的收益)。它只是通过一个看似有问题的参数来实现。
编辑:
答案 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)