Привет, я пытаюсь создать веб-интерфейс, который позволит пользователям импортировать содержимое 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); } ?>
Я ценю любую помощь, которая может быть предложена.
COPY FROM file
должен запускаться учетной записью суперпользователя, и это ограничение делает его вообще непригодным для использования в Интернете
Выдержка из документации :
КОПИРОВАНИЕ Именование файла разрешено только для суперпользователей баз данных, поскольку оно позволяет читать или записывать любые файлы, на которые у сервера есть права доступа.
Но 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()
в postgres-соединение с помощью pg_put_line()