无法使用PHP客户端连接到Neo4j

3b6akqbq  于 2023-11-18  发布在  PHP
关注(0)|答案(1)|浏览(193)

我正在运行neo4j 4.1.12,可以使用我的登录凭据在浏览器中通过bolt连接。我还使用https://github.com/neo4j-php/neo4j-php-client的PHP客户端为Neo4j,并设置了以下代码:

public function __construct($table = null){
    $config = config('Database')->neo4j;

    if (!empty($config['Username'])){
        $auth = Authenticate::basic($config['Username'],$config['Password']);
    } else {
        $auth = null;
    }

    $this->transact = $config['Transact']; // allows config setting of whether to use the Transaction feature

    $this->client = ClientBuilder::create()->withDriver('bolt','bolt://neo4j:PW_THAT_WORKS@localhost:7687')->build();

    $this->table = $table;
}

public function query($query,$params = []){
    $client = $this->client;
    $statement = new Statement($query,$params);

    if ($this->transact){
        $result = $client->writeTransaction(static function (TransactionInterface $tsx) use ($statement) {
            return $tsx->runStatement($statement);
        });
    } else {
        $result = $client->runStatement($statement);
    }

return $result;
}

public function insert($data = null, bool $returnID = true){
    if (empty($this->table)){
        return false;
    }

    $result = $this->query('CREATE ('.$this->table. ')');

    print'<pre>';print_r($result);print'</pre>';
}

字符串
当我打电话:

$neo4j = new \App\Models\Neo4jModel('n:Test');

    $neo4j->insert(array('Hello'=>'World','Foobar'=>'Baz'));


我得到了一个连接错误,说**Cannot connect to any server on alias: bolt with Uris: ('bolt://neo4j:PW_THAT_WORKS@localhost:7687')**,我完全不知道为什么!?下面的Cypher查询neo4j$ CREATE (n:Test)工作得很好:Added 1 label, created 1 node, completed after 408 ms.
另外,如果我尝试http驱动程序,我会得到Http\Discovery\Exception\DiscoveryFailedException-我知道这看起来很明显,但正如我所说,我的浏览器可以访问localhost罚款!我从子域访问。localhost,但这不应该是一个问题,肯定?
运行curl会产生以下结果:curl localhost:7474 { "bolt_routing" : "neo4j://localhost:7687", "transaction" : "http://localhost:7474/db/{databaseName}/tx", "bolt_direct" : "bolt://localhost:7687", "neo4j_version" : "4.1.12", "neo4j_edition" : "community" }
请有人能解释一下为什么这不会连接,我需要做什么来修复它?

jtw3ybtb

jtw3ybtb1#

我在从neo4j v3.51升级到新版本时遇到了同样的问题(在切换n4 j版本之前转换到新的php客户端)。
据我所知,它不在文档中,但在代码中,你会发现neo4j-php-client只支持bolt协议版本4.4.* 和^5.0。鉴于此,并基于neo4j's bolt protocol compatibility table,这意味着您必须使用neo4j v4.4或更高版本才能在此客户端中使用Bolt。请注意,客户端的底层Bolt驱动程序(由stefanak-michal)确实支持较低的协议版本,所以如果你真的需要Bolt并且不能升级你的DB版本,直接使用它可能是一个选择。
为了完整起见,它在ProtocolFactory::Protocol()中,您会发现您的Bolt连接失败:

public function createProtocol(IConnection $connection, AuthenticateInterface $auth, string $userAgent): array
{
    $bolt = new Bolt($connection);
    $bolt->setProtocolVersions(5, 4.4);
    enter code here
    $protocol = $bolt->build();

    if ( !($protocol instanceof V4_4) && !($protocol instanceof V5) ) {
        throw new RuntimeException('Client only supports bolt version 4.4.* and ^5.0');
    }

    $response = $auth->authenticateBolt($protocol, $userAgent);

    return [$protocol, $response];
}

字符串

相关问题