首页 > 解决方案 > 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,但我没有尝试过。

标签: phpsqlpostgresqlmdb2

解决方案


推荐阅读