2017-05-25 102 views
0
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']); 
}; 

我有錯誤後,執行該代碼PDO PostgreSQL的COPY

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,和我嘗試執行參數拷貝查詢。

回答

1

兩個問題:

  1. 與參數一份聲明中不能使用COPY

  2. 您不能對錶名等標識符使用參數。

您必須將表名寫入COPY語句。

+0

1)爲什麼? 2)好的 我想執行復雜的查詢與COPY中的許多條件。這是最好的辦法嗎? Laravel查詢生成器和PDO不適合這種情況? – chmax

+0

廣告「爲什麼」:因爲很少有人想要用不同的參數執行相同的「COPY」語句,這是準備語句的主要用例。 Ad Laravel查詢生成器:我不知道,它可以用來組成查詢字符串嗎?如果是的話,你可以構造一個SQL查詢並將其與你需要的'COPY'命令的其餘部分連接起來。 –