您好我正在尝试构建一个允许人们将csv文件的内容导入postgresql数据库的Web界面。下面是我正在尝试做的php组件,但是当我运行时,我只是从我的die命令获得“上传数据时出现问题:”但没有其他错误。
对于此示例,我已经为csv文件硬编码了一个值,但目的是让用户指向其计算机或网络位置上的csv文件。
<?php
if ($_POST['submit']) {
// attempt a connection
$dbh = pg_connect("host=localhost dbname=blah user=user password=pass123");
if (!$dbh) {
die("Error in connection: " . pg_last_error());
}
// execute query
$sql = "COPY personaldetails(name, email, postaladdress, phone, username, password) FROM '../Test/Book1.csv' WITH DELIMITER ',' CSV";
$result = pg_query($dbh, $sql);
if (!$result) {
die("There was a problem uploading you data: " . pg_last_error());
}
echo "Data successfully inserted!";
// free memory
pg_free_result($result);
// close connection
pg_close($dbh);
}
?>
感谢您提供的任何帮助。
答案 0 :(得分:5)
COPY FROM file
必须由超级用户帐户运行,此限制使其通常不适合网络使用
COPY命名文件只允许用于数据库超级用户,因为它 允许读取或写入服务器有权访问的任何文件 访问。
但是PHP提供了对COPY FROM stdin
的支持,但没有这个限制。
这个来自php文档的例子展示了它是如何完成的:
$conn = pg_pconnect("dbname=foo");
pg_query($conn, "create table bar (a int4, b char(16), d float8)");
pg_query($conn, "copy bar from stdin");
pg_put_line($conn, "3\thello world\t4.5\n");
pg_put_line($conn, "4\tgoodbye world\t7.11\n");
pg_put_line($conn, "\\.\n");
pg_end_copy($conn);
如果是文件,则需要使用php函数打开文件并将其逐行提供给与pg_put_line()