【问题标题】:PDO postgresql COPYPDO postgresql 复制
【发布时间】:2017-05-25 22:04:05
【问题描述】:
function exportToCsv () {

  $dbh = new PDO('pgsql:'
            . (env('DB_DATABASE') ? ';dbname='.env('DB_DATABASE') : '')
            . (env('DB_HOST') ? ';host='.env('DB_HOST') : '')
            , env('DB_USERNAME') 
            , env('DB_PASSWORD')
          );

  $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
  $sth = $dbh->prepare('COPY (select * from ?) TO \'/tmp/report.csv\' DELIMITER \',\' CSV HEADER;');
  $sth -> execute(['stats']);
};

执行此代码后出现错误

PDOStatement::execute(): SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$1"
LINE 1: COPY (select * from $1) TO '/tmp/report.csv' DELIMITER ',' C...

我使用 laravel,我尝试执行参数化复制查询。

【问题讨论】:

    标签: php postgresql laravel pdo


    【解决方案1】:

    两个问题:

    1. 您不能在带参数的准备好的语句中使用COPY

    2. 您不能使用参数作为标识符,如表名。

    您必须将表名写入COPY 语句。

    【讨论】:

    • 1) 为什么? 2) 好的,我想在 COPY 中执行具有许多条件的复杂查询。哪个是最好的方法? Laravel 查询生成器和 PDO 不适合这种情况?
    • Ad "why":因为很少有人想要使用不同的参数执行相同的 COPY 语句,这是准备好的语句的主要用例。 Ad Laravel 查询生成器:不知道,能不能用来组成查询字符串?如果是,您可以构建一个 SQL 查询并将其与您需要的其余“COPY”命令连接起来。
    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 2013-02-14
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 2010-11-03
    • 2021-07-29
    相关资源
    最近更新 更多