我想将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);
我执行了查询,但我无法将其写入文件。我怎么做?
非常感谢帮助。
答案 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();
?>