【问题标题】:PHP MySQL importing uploaded csv errorsPHP MySQL导入上传的csv错误
【发布时间】:2013-06-15 01:26:20
【问题描述】:

我对 php/mysql 非常陌生,但在创建允许我的用户上传 csv 文件并替换更改的数据/插入新数据的页面时遇到了困难。我知道我的数据库连接有效,因为我有另一个页面以可排序/可搜索的方式显示数据库内容。下面是我得到的代码和错误。

数据导入.html

<html>
<body>

<form action="dataimport.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

数据导入.php

<?php
include $_SERVER['DOCUMENT_ROOT'] . '/includes/db.inc.php';

if ($_FILES["file"]["error"] > 0)
  {
  echo "Error: " . $_FILES["file"]["error"] . "<br>";
  exit();
  }
else
  {
  echo "Upload: " . $_FILES["file"]["name"] . "<br>";
  echo "Type: " . $_FILES["file"]["type"] . "<br>";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }

$datafile = $_FILES["file"];

  try
{
  $sql = "LOAD DATA INFILE'".$datafile."' REPLACE INTO TABLE table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES
    (@col1,@col2,@col3...)";
  $s = $pdo->prepare($sql);
  $s->execute();
}
catch (PDOException $e)
{
  $error = 'Unable to connect to the database server.';
  include $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
  exit();
}
?>

我得到的输出:

Upload: Report.csv
Type: application/vnd.ms-excel
Size: 1010.1943359375 kB
Stored in: E:\XAMPP\tmp\phpBD04.tmp
Notice: Array to string conversion in \dataimport.php on line 21

Unable to connect to the database server.
exception 'PDOException' with message       'SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user 'user'@'localhost' (using password: YES)' in \dataimport.php:24 Stack trace: #0 \dataimport.php(24): PDOStatement->execute() #1 {main} 

我知道我可能在 $sql 行中包含了错误的文件,但对于我的一生来说,我在这里碰壁,找不到有用的示例。

添加数据库包含

<?php
try
{
  $pdo = new PDO('mysql:host=localhost;dbname=db', 'user', 'pass');
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  $pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e)
{
  $error = 'Unable to connect to the database server.';
  include $_SERVER['DOCUMENT_ROOT'] . '/includes/error.html.php';
  exit();
}
?>

【问题讨论】:

  • 这是说Unable to connect to the database server. 因此这意味着您的登录凭据不正确。您应该有一个配置文件,您应该在其中放置 hostuserpassworddatabase
  • 如最初的帖子中所述,包含的 db 文件有效且有效,我在另一个页面上使用完全相同的包含,因此我知道 user/pass/etc 是正确的。代码明确指出无法连接错误,这不是系统生成的错误。
  • 你在哪里初始化$pdo 对象,你试图通过它来查询数据库?
  • 添加了数据库包含文件。如前所述,用户/通行证/等都通过另一个页面进行了验证。
  • 澄清一下,我已经验证了错误是由 dataimport.php 踢出的,而不是 db include

标签: php mysql file-upload pdo


【解决方案1】:
'Access denied for user 'nocreport'@'localhost' (using password: YES)'

您的数据库连接配置错误。用户名或密码不匹配。

编辑。

在添加更多源代码后进行了一些研究。

  1. 检查您是否为用户'nocreport'@'localhost' 授予了FILE 权限。
  2. 您也可以尝试像这样添加LOCAL关键字:

    LOAD DATA LOCAL INFILE '".$datafile."' REPLACE INTO TABLE table FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES (@col1,@col2,@col3...)

【讨论】:

  • 如最初的帖子中所述,包含的 db 文件有效且有效,我在另一个页面上使用完全相同的包含,因此我知道 user/pass/etc 是正确的。代码明确指出无法连接错误,这不是系统生成的错误
  • PDO 在此处返回 RDBMS 系统给出的错误。您是否可能使用多个数据库连接?实际上我们看不到你初始化 PDO 对象的方式,所以我们不能告诉你更多。
  • 我只能猜测,但也许您没有该用户执行“加载数据”操作的凭据。
  • 已编辑答案,为您添加了一些可能有帮助的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
相关资源
最近更新 更多