php连接access需用32位odbc驱动,连接字符串须用绝对路径和正斜杠,中文/空格字段名用方括号,日期用#yyyy-mm-dd#格式,null值须为字面量。

PHP 用 odbc_connect 连 Access(.mdb)必须装 32 位驱动
Windows 上 PHP 默认是 32 位(哪怕系统是 64 位),而新版 Windows 自带的 Access Database Engine 是 64 位,直接装会报错:[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序。
解决办法只有装 32 位驱动——去微软官网搜 AccessDatabaseEngine_X86.exe 下载安装,别选带 x64 的。装完重启 PHP 服务(比如 Apache 或 php-fpm)。
- PHP 进程和 ODBC 驱动位数必须严格一致,不匹配就
odbc_connect返回 false - 如果用 WAMP/XAMPP,确认它自带的 PHP 是 32 位(
php -v看不到 “x64” 字样基本就是) - 驱动装好后,在 Windows 的
ODBC 数据源(32 位)里能看到Microsoft Access Driver (*.mdb, *.accdb)
连接字符串里路径不能用反斜杠或相对路径
odbc_connect 的 DSN 部分对路径很敏感,写错一个字符就连接失败,常见错误是路径里混用 \ 和 /,或者用了 ./data.mdb 这类相对路径。
必须用绝对路径、正斜杠、且路径要能被 PHP 进程读取(注意 IIS/Apache 用户权限):
立即学习“PHP免费学习笔记(深入)”;
- 正确写法:
DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/web/data.mdb; - 错误写法:
DBQ=C:\web\data.mdb(反斜杠在双引号里会被转义成换行或制表符) - 错误写法:
DBQ=./data.mdb(PHP 不会自动补全当前脚本目录,而是按 Web 服务器工作目录解析,通常不是你想要的) - 如果路径含中文或空格,不用加引号,Access 驱动本身不支持引号包裹路径
查询中文字段名或含空格字段时必须用方括号
Access 允许字段名带空格、中文甚至标点,但 ODBC 层不认,直接写 SELECT 姓名 FROM users 会报错:[Microsoft][ODBC Microsoft Access Driver] 语法错误 (操作符丢失) 在查询表达式 '姓名' 中。
所有非标准标识符都得用方括号包起来:
- 中文字段:
SELECT [姓名], [用户 ID] FROM [用户表] - 含空格字段:
SELECT [First Name], [Last Name] FROM [Contacts] - 表名也一样,如果表名是
Order Details,就得写FROM [Order Details] - 别用反引号(
`)或双引号,Access 只认方括号
INSERT/UPDATE 时日期和 NULL 值容易出错
Access 对日期字面量格式极敏感,写错就静默失败或插成 1899-12-30;NULL 值如果传了空字符串或未定义变量,反而会存成空字符串而不是 NULL。
- 插入日期必须用
#2024-05-20#格式(井号包裹,且必须是YYYY-MM-DD),不能用单引号或 PHP 的date()直接拼 - 显式插入 NULL:写
INSERT INTO t (name, birth) VALUES ('张三', NULL),别传空字符串、'NULL'或变量未初始化 - 字段设为“允许 Null”,但 ODBC 默认把空值当空字符串处理,所以 PHP 侧要确保
NULL是字面量,不是字符串 - Access 不支持
LAST_INSERT_ID(),想取刚插入的主键得用SELECT @@IDENTITY(需同个连接、紧接 INSERT 后执行)











