php - postgres 和 php 可能出现 mdb2 或转义错误
问题描述
我在 PHP 的 nowdoc 语法中有这个 postgres 查询:
$sql = <<<'EOT'
select
id,
name,
array_to_string(my_tables.table_query_tables, ',') as table_query_tables,
array_to_string(my_tables.chart_query_tables, ',') as chart_query_tables
from
my_queries mq
left join
(
select
mqs.report_id,
regexp_matches(lower(regexp_replace(mqs.table_query, E'[\\n\\r]+', ' ', 'g')), ' from ([\[\]a-z_0-9,]+)[.]?([^ ]*)', 'g') as table_query_tables,
regexp_matches(lower(regexp_replace(mqs.chart_query, E'[\\n\\r]+', ' ', 'g')), ' from ([\[\]a-z_0-9,]+)[.]?([^ ]*)', 'g') as chart_query_tables
from
my_query_statements mqs
)my_tables on my_tables.report_id = mq.id
order by
name
EOT;
table_query 和 chart_query 字段包含可以分布在多行上的查询,我使用 regexp_replace 删除换行符和 cr,然后使用 regexp_matches 来获取在这些查询中查询的表。
如果我在 pgadmin4 中运行它,它会完美运行。但是,当它从一个名为 ajax 的 PHP 页面运行时,它会在
regexp_matches(lower(regexp_replace(mqs.table_query, E'[\\n\\r]+', ' ', 'g')), ' from ([\[\]a-z_0-9,]+)[.]?([^ ]*)', 'g') as table_query_tables,
regexp_matches(lower(regexp_replace(mqs.chart_query, E'[\\n\\r]+', ' ', 'g')), ' from ([\[\]a-z_0-9,]+)[.]?([^ ]*)', 'g') as chart_query_tables
线。如果我删除这些行,它会起作用。我们正在使用 mdb2,我认为解析正则表达式可能有问题,也许?很难说出它在哪里失败,或者如何修复它。我尝试添加和删除 \'s,但我没有尝试过。
解决方案
推荐阅读
- ios - 使用打开按钮从试飞中打开应用程序时在启动时崩溃
- matlab - 如何在 MATLAB 中使用点生成圆顶
- amazon-web-services - AWS ECS 容量提供商
- c# - 将参数传递给 C# 中的 .cmd 文件
- spring - Spring @RequestBody 是如何工作的?以及@RequestBody 如何映射 json 来自定义对象?
- javascript - 如果在移动设备中打开菜单,如何停止正文滚动?
- java - Flink 原始和托管状态。什么时候使用它们?
- r - 用 ggplot 和 2 个过滤器叠加 2 个条形图
- c# - 如何为外出请求 ASP.net c# 添加动态标头?
- laravel - 使用 \Mail::send 不能设置标题