You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Win2019 IIS10环境PHP连接MySQL报500错误及语法解析错误问题

问题根因

你遇到的两个报错分别对应不同的问题:

  1. 500错误+语法报错unexpected '$pdo' (T_VARIABLE):你复制的代码中,try {、各个catch {的大括号后面隐藏了Unicode零宽不可见字符,PHP解析器无法识别这类字符,会将其判定为无效语法,导致紧跟在后面的$pdo被识别为意外的Token,直接触发致命错误返回500。这也是为什么你觉得代码结构没问题但跑不起来的核心原因,这类不可见字符通常是从带格式的文档(Word、富文本网页、PDF等)复制代码时夹带的。
  2. allow_url_include弃用警告:PHP 7.2及以上版本已经废弃该配置项,你当前php.ini中开启了该配置,会触发废弃警告,不属于致命错误但建议修改。

修复步骤

  • 第一步:清理代码中的不可见字符
    不要直接复制现有代码,手动重新敲一遍连接逻辑,或者用编辑器的「显示所有字符」功能删除大括号旁的不可见字符,规范参考代码如下:
<?php
define("DB_HOST", "xxxx");
define("DB_PORT", 3306);
define("DB_NAME", "xxxx");
define("DB_USER", "xxxxx");
define("DB_PASS", "xxxxxxx");
define("DB_CHARSET", "utf8mb4");

try {
    $dsn = sprintf('mysql:host=%s;port=%d;dbname=%s;charset=%s', DB_HOST, DB_PORT, DB_NAME, DB_CHARSET);
    $pdo = new PDO($dsn, DB_USER, DB_PASS);
    $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    // 建议开启PDO异常模式,方便后续排查连接以外的错误
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "数据库连接失败(100): " . $e->getMessage();
    die();
} catch (Exception $e) {
    echo "数据库连接失败(200): " . $e->getMessage();
    die();
}
?>

注意原代码中将端口写在host值里的写法不符合PDO DSN规范,单独拆分port参数兼容性更好。

  • 第二步:修改php.ini配置消除警告
    打开当前PHP版本对应的php.ini文件,找到allow_url_include配置项,将值修改为Off,修改后重启IIS的PHP FastCGI服务即可生效。
  • 第三步:验证扩展状态
    新建phpinfo.php文件写入<?php phpinfo(); ?>,访问后确认pdo_mysql、mysqli扩展处于启用状态即可。

内容的提问来源于stack exchange,提问作者Sebastian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:00:01