【问题标题】:Copy .txt file into Postgres using PHP/ PDO使用 PHP/PDO 将 .txt 文件复制到 Postgres
【发布时间】:2013-05-05 14:22:24
【问题描述】:

我正在尝试使用以下代码将 .txt 文件输入到 postgres 数据库中。

当我使用 pgAdminIII 直接在数据库中输入它时,这个 sql 查询有效,但在 php 代码中我得到一个语法错误:

PHP Parse error:  syntax error, unexpected T_STRING in D:\Apapub\public_html\databases\B13\upload_files.php on line 34

当我像这样从文本文件中删除 ('') 时:

$sql = 'COPY "public"."tblSedimentGrabEvent" FROM D:/Apapub/public_html/databases/B13/temp/grabevents.txt CSV';

我从 sql 端得到一个错误。 任何帮助将不胜感激,显然我是编码世界的新手。

谢谢

<?php
try { 
$db = new PDO("pgsql:dbname=NAME;host=HOST","USER","PASS");

}   
catch(PDOException $e) { echo $e->getMessage();
}

if ($_FILES["file"]["error"] > 0)
{
echo "Error: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Uploaded Successfully!<br>";
echo "File Name: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"]. "<br>";

if (file_exists("upload/" . $_FILES["file"]["name"]))
  {
    echo $_FILES["file"]["name"] . " already exists. ";
  }
    else
  {
    move_uploaded_file($_FILES["file"]["tmp_name"],
    "D:/Apapub/public_html/databases/B13/temp/" . $_FILES["file"]["name"]);
    echo "Stored in: " . "D:\Apapub\public_html\databases\B13\temp" . $_FILES["file"]["name"]. "<br>";
  }

 }

$sql = 'COPY "public"."tblSedimentGrabEvent" FROM 'D:/Apapub/public_html/databases/B13/temp/grabevents.txt' CSV';

$resultC = $db->query($sql); 
if (!$resultC){
echo ('The query did not succeed<BR>');
echo ($sql);

}   

?>

【问题讨论】:

  • 什么是 SQL 错误?
  • 错误:“D”处或附近的语法错误第 3 行:从 D:/Apapub/public_html/datab 复制“tblSedimentGrabEvent”... ^

标签: php sql postgresql pdo


【解决方案1】:

php 方面的问题是您不正确地使用引号。尝试改变

$sql = 'COPY "public"."tblSedimentGrabEvent" FROM 'D:/Apapub/public_html/databases/B13/temp/grabevents.txt' CSV';
                                                  ^                                                       ^

$sql = 'COPY "public"."tblSedimentGrabEvent" FROM "D:/Apapub/public_html/databases/B13/temp/grabevents.txt" CSV';

或到

$sql = 'COPY "public"."tblSedimentGrabEvent" FROM \'D:/Apapub/public_html/databases/B13/temp/grabevents.txt\' CSV';

【讨论】:

  • 错误:“D:/Apapub/public_html/databases/B13/temp/grabevents.txt”或附近的语法错误第 3 行:从“D:/Apapub/public_html”复制“tblSedimentGrabEvent” /数据... ^
  • 谢谢。最后一行有效,您能解释一下为什么正斜杠和反斜杠有效以供将来参考吗?
  • @AbelSantana 不客气。由于您的字符串是单引号,以便在您的 $sql 变量中有一个文字单引号,您需要使用反斜杠 () 对其进行转义。因此,您的文件路径周围有两个\'s。阅读更多here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2019-12-08
  • 2020-04-01
  • 1970-01-01
相关资源
最近更新 更多