Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过网页中的php将CSV文件导入postgres_Php_Postgresql_Csv - Fatal编程技术网

通过网页中的php将CSV文件导入postgres

通过网页中的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

大家好,我正在尝试构建一个web界面,允许人们将csv文件的内容导入postgresql数据库。下面是我试图做的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);
}   

?>
非常感谢您提供的任何帮助。

从文件复制必须由超级用户帐户运行,此限制通常不适用于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实际将文件置于最少处理的几个命令之下。