【问题标题】:Get error when run cypher query multi line in php在php中运行密码查询多行时出错
【发布时间】:2022-07-18 17:22:07
【问题描述】:

从 luadis php 驱动程序运行此查询密码时出现此错误 单行查询已运行,​​但多行查询密码未运行

$hosturl =  self::$config['hosturl'];
$result = $client->run("
            UNWIND range(0,4) as level
            CALL apoc.cypher.doIt('
            MATCH (c:Category { pagesFetched: false, level: $level })
            CALL apoc.load.json('$hosturl/w/api.php?format=json&action=query&list=categorymembers&cmtype=page&cmtitle=Category:' + apoc.text.urlencode(c.catName) + '&cmprop=ids|title&cmlimit=500')
            YIELD value as results
            UNWIND results.query.categorymembers AS page
            MERGE (p:Page {pageId: page.pageid})
            ON CREATE SET p.pageTitle = page.title, p.pageUrl = '$hosturl/wiki/' + apoc.text.urlencode(replace(page.title, ' ', '_'))
            WITH p,c
            MERGE (p)-[:IN_CATEGORY]->(c)
            WITH DISTINCT c
            SET c.pagesFetched = true', { level: level }) yield value
            return value");
        

我得到了这个错误:

[Sat Feb 19 00:27:39 2022] PHP Fatal error:  Uncaught Bolt\error\MessageException: Invalid input 'h': expected whitespace, '.', node labels or rel types, '[', '^', '*', '/', '%', '+', '-', "=~", IN, STARTS, ENDS, CONTAINS, IS, '=', "<>", "!=", '<', '>', "<=", ">=", AND, XOR, OR, ',' or ')' (line 5,
column 25 (offset: 141))
"                       CALL apoc.load.json('https://en.wikipedia.org/w/api.php?format=json&action=query&list=categorymembers&cmtype=page&cmtitle=Category:' + apoc.text.urlencode(c.catName) + '&cmprop=ids|title&cmlimit=500')"
                         ^ (Neo.ClientError.Statement.SyntaxError) in C:\xampp\htdocs\Graph\vendor\stefanak-michal\bolt\src\protocol\V3.php:82
Stack trace:
#0 C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Bolt\BoltUnmanagedTransaction.php(131): Bolt\protocol\V3->run()
#1 C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Bolt\Session.php(87): Laudis\Neo4j\Bolt\BoltUnmanagedTransaction->runStatements()
#2 C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Client.php(77): Laudis\Neo4j\Bolt\Session->runStatements in C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Exception\Neo4jException.php on line 50
[Sat Feb 19 00:27:39 2022] [::1]:1194 [500]: GET /querycypher.php - Uncaught Bolt\error\MessageException: Invalid input 'h': expected whitespace, '.', node labels or rel types, '[', '^', '*', '/', '%', '+', '-', "=~", IN, STARTS, ENDS, CONTAINS, IS, '=', "<>", "!=", '<', '>', "<=", ">=", AND, XOR, O
R, ',' or ')' (line 5, column 25 (offset: 141))
"                       CALL apoc.load.json('https://en.wikipedia.org/w/api.php?format=json&action=query&list=categorymembers&cmtype=page&cmtitle=Category:' + apoc.text.urlencode(c.catName) + '&cmprop=ids|title&cmlimit=500')"
                         ^ (Neo.ClientError.Statement.SyntaxError) in C:\xampp\htdocs\Graph\vendor\stefanak-michal\bolt\src\protocol\V3.php:82
Stack trace:
#0 C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Bolt\BoltUnmanagedTransaction.php(131): Bolt\protocol\V3->run()
#1 C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Bolt\Session.php(87): Laudis\Neo4j\Bolt\BoltUnmanagedTransaction->runStatements()
#2 C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Client.php(77): Laudis\Neo4j\Bolt\Session->runStatements in C:\xampp\htdocs\Graph\vendor\laudis\neo4j-php-client\src\Exception\Neo4jException.php on line 50
[Sat Feb 19 00:27:39 2022] [::1]:1194 Closing

请告诉我如何解决这个问题 请帮帮我

【问题讨论】:

标签: php neo4j neo4jclient neo4jphp


【解决方案1】:

我不太了解 apoc 调用的用法。您可以像这样内联查询:

$result = $client->run(<<<'CYPHER'
            UNWIND range(0,4) as level
            MATCH (c:Category { pagesFetched: false, level: level })
            CALL apoc.load.json($hostUrl + '/w/api.php?format=json&action=query&list=categorymembers&cmtype=page&cmtitle=Category:' + apoc.text.urlencode(c.catName) + '&cmprop=ids|title&cmlimit=500')
            YIELD value as results
            UNWIND results.query.categorymembers AS page
            MERGE (p:Page {pageId: page.pageid})
            ON CREATE SET p.pageTitle = page.title, p.pageUrl = '$hosturl/wiki/' + apoc.text.urlencode(replace(page.title, ' ', '_'))
            WITH p,c
            MERGE (p)-[:IN_CATEGORY]->(c)
            WITH DISTINCT c
            SET c.pagesFetched = true
            CYPHER, ['hostUrl' => $hostUrl]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多