使用php将postgres输出写入文件

时间:2013-11-22 23:05:24

标签: php file postgresql

我想将postgres查询的输出写入文件中。我使用PHP连接到远程数据库并执行查询。这是示例代码。

$connection_id=pg_connect("host=localhost dbname=test user=test password=test");
$psql="select example from sample limit 180";
$result=pg_query($connection_id,$psql);

我执行了查询,但我无法将其写入文件。我怎么做?

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

您无法直接将查询结果写入文件。 pg_query返回的结果不是任何可以打印或写入文件的数据的字符串。它可能是错误状态(false),也可能是为此查询保留的结果数据的某种“引用”。

如果$result不是==false,并且PostgreSQL可以在查询中找到任何行,那么您可以fetch these rows。但那是一个额外的步骤。它不包含在pg_query中。为了检查找到了多少结果行,您可以使用函数pg_num_rows

然后,您可以使用pg_fetch_assoc遍历结果集。这只是一个合适的功能。还有一些,例如pg_fetch_row

这是一些小的示例代码(快速和脏,没有太多的错误处理):

<?php 

    // Set the output of this script to plain text
    header("Content-Type: text/plain");

    $conn = pg_connect("...");   // insert your data here
    if (!$conn) die ("Couldn't connect.");

    $result = pg_query($conn, "SELECT example FROM ...");  // TODO
    // Check for error and check the number of rows found:
    if ((!$result) || (pg_num_rows($result) < 1)) {
        pg_close();
        echo "Couldn't find any data for your query. Maybe the query is wrong (error) or there are no matching lines.";
        exit;
    }

    // Line counter for screen output
    $i = 1;

    // Open file.   (Important: Script must have write permission for the directory!)
    $fileHandle = fopen("./myresults.txt", "w");

    // Do this as long as you can find more result rows:
    while ($row = pg_fetch_assoc($result)) {
        // Write value to the output that is sent to the web browser client:
        echo "Line " . $i . ": \"" . strip_tags($row['example']) . "\"\r\n";
        // Write the same value as a new line into the opened file:
        fwrite ($fileHandle, $row['example'] . "\r\n";
        // Increase line number counter:
        $i++;
    }

    // Close the file:
    fclose ($fileHandle);

    // Free the result / used memory:
    pg_free_result($result);

    pg_close();

?>