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

Yii2 v2.0.51 ActiveRecord查询报T_ENCAPSED_AND_WHITESPACE语法错误

问题分析与解决

核心问题

你使用Yii2 v2.0.51框架,原本在PHP7.4.0+MySQL8环境下运行正常,切换到PHP7.1.0或7.3.0后,ActiveRecord查询全部报错,仅原生SQL查询可正常执行。

报错详情

  • 报错的ActiveRecord查询代码:self::findAll(['status' => parent::ACTIVE]);
  • 可正常运行的原生SQL代码:Yii::$app->db->createCommand("SELECT * FROM news_categories where status = '1'")->queryAll();
  • 错误提示:语法错误(ParseError):意外的空白字符,预期'-'、标识符、变量或数字
  • 报错位置:/var/www/html/roleindia/vendor/yiisoft/yii2/db/mysql/Schema.php第236行,对应代码行:'name' => $tableRow['constraint_name'],

原因解析

  1. 版本兼容性不匹配:Yii2 v2.0.51官方要求最低PHP版本为7.2.0,PHP7.1.0不在支持范围内,直接会导致框架核心代码解析失败。
  2. PHP7.3环境的潜在问题:
    • MySQL8与PHP7.3驱动适配问题:PHP7.3默认的mysqlnd驱动版本可能无法兼容MySQL8的caching_sha2_password认证协议。
    • 框架文件损坏:Schema.php可能存在不可见字符或被篡改,导致PHP解析时触发语法错误。

解决方案

1. 调整PHP版本至兼容范围

直接放弃PHP7.1.0,切换到PHP7.2.0~8.1.x之间的版本(如你原本正常运行的7.4.0,或确保驱动适配的7.3.0)。

2. 修复PHP7.3环境下的报错

若坚持使用PHP7.3.0:

  • 更新MySQL驱动:确认php.ini中已开启mysqlnd扩展,同时升级MySQL客户端库至支持MySQL8认证协议的版本。
  • 重新安装框架依赖:执行composer install重新拉取Yii2核心文件,替换可能损坏的Schema.php。
  • 验证常量定义:确认parent::ACTIVE常量已正确定义为1,与原生SQL中的查询条件保持一致,避免ActiveRecord构建查询时出现参数异常。

3. 临时排查方案

若问题仍存在,可开启Yii2日志功能,记录ActiveRecord生成的SQL语句,与原生SQL对比差异,定位具体的查询构建问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:40:54