【问题标题】:PHP Neo4J cypher query loop with another query breaks loop (LAUDIS Client)PHP Neo4J 密码查询循环与另一个查询中断循环(LAUDIS 客户端)
【发布时间】:2022-11-25 03:50:10
【问题描述】:

从 Everyman Client 更改为 Laudis Client,以便 PHP 访问 AURA DB (Neo4j)。

代码:

$outerQuery = "MATCH (n) return n.name AS name";
$outerResult = $client->run($outerQuery);

foreach ($outerResult as $detailOut) {

    $innerQuery = 'MATCH (n) WHERE n.name = "'.detailOut['name'].'" return n';
    $innerResult = $client->run($innerQuery);

    foreach ($innerResult as $detailIn) {
    // do something
    } 
}

$client 是这样构造的

// embedding Neo4J PHP DB driver                                                              
use Laudis\Neo4j\Authentication\Authenticate;
use Laudis\Neo4j\ClientBuilder;

// establish a client-object for database access
$client = ClientBuilder::create()
  ->withDriver(
    'example',
    $_ENV['db_url'],
    Authenticate::basic($_ENV['db_username'], $_ENV['db_password'])
)
->build();

外部查询获得有效结果,但只要首先执行内部 db 语句,外部循环就会中断 - 无论是否使用依赖参数。您可以在语句之前执行代码,这不是问题,但是运行语句会终止外循环。如果我注释掉内部循环中的运行语句,循环将正确运行并显示预期结果。这些语句已经在 Neo4j 浏览器中进行了测试并且没有问题,但即使使用像这些示例这样的简单语句,它也会破坏外部循环。

我唯一的猜测是,我不能像以前使用 Everyman Client 那样将这些语句用于 LAUDIS 客户端。

任何人都知道我需要更改什么或我需要使用哪些其他代码来使内部循环语句依赖于外部循环结果的字段?

谢谢

【问题讨论】:

    标签: php neo4j


    【解决方案1】:

    它是否可能因为您缺少一个引号而中断?

     # before:
        $innerQuery = 'MATCH (n) WHERE n.name = "'.detailOut['name'].'" return n";
    '# after:
        $innerQuery = 'MATCH (n) WHERE n.name = "'.detailOut['name'].'" return n"';
    

    【讨论】:

    • 感谢您的提示,我更正了我在发布问题时犯的错字。不幸的是,这不是问题 - 在原始代码中,这也会在执行时生成错误消息,但我在运行时没有收到任何错误,error_reporting(E_ERROR | E_PARSE);被激活。
    【解决方案2】:

    客户端的 2.7 版导致了问题,很高兴 2.8 版现在有了修复,因此问题得到解决:升级到最新版本。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2015-02-15
      • 2014-05-14
      • 1970-01-01
      • 2014-07-24
      • 2023-04-09
      相关资源
      最近更新 更多