PHP 连 Neo4j 必须用专用驱动,不可用 mysqli/PDO;推荐 graphaware/neo4j-php-client(HTTP,开箱即用)或 neo4j-php-driver(Bolt,性能好但需编译);连接需注意认证、端口启用及 Cypher 参数化。

PHP 怎么连 Neo4j:别用 mysqli/pdo,得换驱动
PHP 原生不支持 Neo4j,mysqli 和 PDO 连不了——它们只认关系型数据库。Neo4j 是图数据库,通信协议是 Bolt(二进制)或 HTTP,必须用专用客户端库。
主流选择是官方维护的 neo4j-php-driver(基于 C 扩展,性能好),或者纯 PHP 的 graphaware/neo4j-php-client(HTTP 协议,无需编译,调试友好)。
-
neo4j-php-driver需要编译安装,依赖libneo4j-client,PHP 7.4+ 支持,但 Windows 下编译麻烦 -
graphaware/neo4j-php-client用 Composer 直接装:composer require graphaware/neo4j-php-client,开箱即用 - 若项目已用 Laravel,可搭配
graphaware/neo4j-laravel简化配置
用 graphaware/client 连接 Neo4j:三步配通
这是最稳妥的入门路径,尤其适合开发和测试环境。它默认走 HTTP(端口 7474),不用开 Bolt(7687)也能跑。
示例代码片段:
立即学习“PHP免费学习笔记(深入)”;
use GraphAware\Neo4j\Client\ClientBuilder;
$client = ClientBuilder::create()
->addConnection('default', 'http://neo4j:password@localhost:7474') // 注意:密码不能含特殊字符,否则需 URL 编码
->build();
$result = $client->run('MATCH (n) RETURN count(n) AS cnt');
$cnt = $result->firstRecord()->value('cnt');
- 连接字符串格式固定为
http://,缺一不可: @ : - Neo4j 5.x 默认关闭 HTTP 接口(只留 Bolt),需在
neo4j.conf中显式启用:dbms.connector.http.enabled=true - 若启用了认证(默认开启),用户名一定是
neo4j,首次登录后必须改密,否则后续连接会报AuthorizationFailedException
执行 Cypher 查询要注意参数绑定,别拼字符串
直接拼接 PHP 变量到 Cypher 字符串里,不仅有注入风险,还会因引号、转义出错。graphaware/client 支持原生参数绑定,必须用。
PHP5学习对象教程由美国人古曼兹、贝肯、瑞桑斯编著,简张桂翻译,电子工业出版社于2007年12月1日出版的关于PHP5应用程序的技术类图书。该书全面介绍了PHP 5中的新功能、编程方法及设计模式,还分析阐述了PHP 5中新的数据库连接处理、错误处理和XML处理等机制,帮助读者系统了解、熟练掌握和高效应用PHP。
错误写法:
$name = "Alice's Bar";
$query = "CREATE (:Venue {name: '$name'})"; // 单引号破坏语法!
正确写法:
$query = 'CREATE (:Venue {name: $name})';
$params = ['name' => "Alice's Bar"];
$client->run($query, $params);
- 所有动态值都必须用
$key占位符,对应$params数组键名 - 节点标签(如
Venue)、关系类型(如FRIENDS_WITH)不能参数化,只能硬编码或白名单校验后拼接 - 批量插入建议用
UNWIND+ 参数数组,比循环run()快一个数量级
Bolt 连接比 HTTP 快,但 PHP 扩展难装是现实瓶颈
生产环境推荐 Bolt(端口 7687),延迟低、支持事务、能复用连接。但 neo4j-php-driver 要求你手动编译 PHP 扩展,在 Docker 外的 CentOS 或 macOS 上容易卡在 libneo4j-client 版本兼容上。
- Docker 用户可直接用预编译镜像:
FROM php:8.2-cli+RUN pecl install neo4j(仅限部分版本) - 若编译失败,错误常是
undefined symbol: neo4j_bolt_version,说明libneo4j-client版本太旧,需源码编译新版 - 临时方案:用
graphaware/client开 Bolt 模式(需额外装graphaware/neo4j-bolt),但它底层仍走 TCP 封装,性能不如原生驱动
真正卡住多数人的不是语法,是环境里那个没装上的 libneo4j-client —— 它不进包管理器主源,得自己下 tar.gz 编译,且和 PHP 扩展版本严格对应。










