没有不值得去解决的问题,也没有不值得去学习的技术!

在 Laravel 6 中打印 SQL,复制至 MySQL 5.7 中执行,执行结果与程序执行结果不一致

决定将 whereRaw 中的 ? 取消,调整为原生 SQL。打印程序执行的 SQL 语句结果,其数量为 81 条
1、打印程序执行的 SQL 语句,结果如下。如图1
打印程序执行的 SQL 语句,结果如下
图1


       $builder = ThemeAsset::select('updated_at', 'asset_key')
           ->where('theme_id', '=', $this->dbViewStorage->getThemeId())
           ->whereRaw('LOWER(asset_key) regexp ?', [strtolower($this->targetToRegex($target))]);

       $query = str_replace(array('?'), array('\'%s\''), $builder->toSql());
       $query = vsprintf($query, $builder->getBindings());
       dump($query);
       exit;




"select `updated_at`, `asset_key` from `theme_asset` where `theme_id` = 'theme' and LOWER(asset_key) regexp '^(assets|apps\.+\.+\assets)'"


2、打印程序执行的 SQL 语句结果,其数量为 79 条。数组元素从 0 开始。如图2
打印程序执行的 SQL 语句结果,其数量为 79 条。数组元素从 0 开始
图2
3、将打印 SQL,复制至 MySQL 5.7 中执行。其数量为 81 条。如图3
将打印 SQL,复制至 MySQL 5.7 中执行。其数量为 81 条
图3
4、决定将 whereRaw 中的 ? 取消,调整为原生 SQL。打印程序执行的 SQL 语句结果,其数量为 81 条。如图4
决定将 whereRaw 中的 ? 取消,调整为原生 SQL。打印程序执行的 SQL 语句结果,其数量为 81 条
图4


$builder = ThemeAsset::select('updated_at', 'asset_key')
           ->where('theme_id', '=', $this->dbViewStorage->getThemeId())
           ->whereRaw('LOWER(asset_key) regexp \'^(assets|apps\.+\.+\assets)\'')


5、保留 whereRaw 中的 ?,需要使用 addslashes 转义 \。打印程序执行的 SQL 语句结果,其数量为 81 条。符合预期。


$assets = ThemeAsset::select('updated_at', 'asset_key')
            ->where('theme_id', '=', $this->dbViewStorage->getThemeId())
            ->whereRaw('LOWER(asset_key) regexp ?', [strtolower(addslashes($this->targetToRegex($target)))])
            ->get();


PHP / Laravel / Yii2 老项目维护与长期技术支持

如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。

适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护

可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查

如需咨询,请联系我,并注明:PHP 维护咨询

联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理