通过网页中的php将CSV文件导入postgres
大家好,我正在尝试构建一个web界面,允许人们将csv文件的内容导入postgresql数据库。下面是我试图做的php组件,但是当我运行时,我发现上传数据时出现了一个问题:从我的die命令,但没有其他错误 对于本例,我已经为csv文件硬编码了一个值,但是其目的是让用户指向其计算机或网络位置上的csv文件通过网页中的php将CSV文件导入postgres,php,postgresql,csv,Php,Postgresql,Csv,大家好,我正在尝试构建一个web界面,允许人们将csv文件的内容导入postgresql数据库。下面是我试图做的php组件,但是当我运行时,我发现上传数据时出现了一个问题:从我的die命令,但没有其他错误 对于本例,我已经为csv文件硬编码了一个值,但是其目的是让用户指向其计算机或网络位置上的csv文件 <?php if ($_POST['submit']) { // attempt a connection $dbh = pg_connect("host=localhost dbnam
<?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);
}
?>
非常感谢您提供的任何帮助。从文件复制必须由超级用户帐户运行,此限制通常不适用于web使用
摘自:
仅允许数据库超级用户复制命名文件,因为
允许读取或写入服务器有权限访问的任何文件
进入
但是PHP提供了对从stdin复制的支持,而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将其逐行提供给postgres连接。从文件复制必须由超级用户帐户运行,此限制通常不适合web使用
摘自:
仅允许数据库超级用户复制命名文件,因为
允许读取或写入服务器有权限访问的任何文件
进入
但是PHP提供了对从stdin复制的支持,而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将其逐行提供给postgres连接pg_last_error中没有任何内容?您可能可以在这里修改我的答案:我的解决方案最好使用PDO,但有一种方法可以使用pg_connect进行修改,我也给出了这种方法。关键是将pg_copy_from与pg_connect一起使用,或将pgsqlcopyfrom数组与PDO一起使用;两者都有很好的文档记录,不需要从文件复制所需的特权,他们也不要求PHP实际对文件执行多个最少处理的命令。pg_last_error中没有任何错误?您可能可以在这里调整我的答案:我的解决方案与PDO配合使用效果最好,但有一种方法可以使用pg_connect进行调整,我也给出了这种方法。关键是将pg_copy_from与pg_connect一起使用,或将pgsqlcopyfrom数组与PDO一起使用;两者都有很好的文档记录,不需要从文件复制所需的那种特权,也不需要PHP实际将文件置于最少处理的几个命令之下。