Я пытаюсь передать строковое значение для параметра следующим образом:
$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
выходы без набора результатов. Если я подставлю фактическое значение параметра (вместо того, чтобы получить его из массива), я получу ожидаемый набор результатов. Точно так же, если я ввожу запрос, используя оболочку Neo4j, я получаю ожидаемые значения.
Так что я делаю не так? Я уверен, что я использую это неправильно, но я не понимаю, как.
Я могу поместить переменную напрямую, и запрос также работает (хотя это сводит на нет любую возможную выгоду от использования параметров где-либо еще в запросе). Это просто делает это с помощью параметра, который кажется проблематичным.
РЕДАКТИРОВАТЬ:
$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)
Других решений пока нет …