【问题标题】:Import CSV to MySQL database using PDO PHP使用 PDO PHP 将 CSV 导入 MySQL 数据库
【发布时间】:2018-04-29 13:48:24
【问题描述】:

我正在尝试创建一个 sql 注入安全的表单,您可以在其中将 CSV 文件上传到 MySQL 数据库。我的代码在下面,但是它会在浏览器中回显 csv 中的数据,但不会将数据插入到数据库中。

<?php
require_once("session.php");
require_once("class.user.php");
$user = new USER();
$user_id = $_SESSION['user_session'];

if(isset($_SESSION['user_session']))
{
    if (isset($_POST['submit'])) {
        $session = $_SESSION['user_session'];
        //upload file
        if (is_uploaded_file($_FILES['csv']['tmp_name'])) {
            echo "<h1>" . "File ". $_FILES['csv']['name'] ." uploaded successfully." . "</h1>";
            echo "<h2>Displaying contents:</h2>";
            readfile($_FILES['csv']['tmp_name']);
        }
        //Import uploaded file to Database
        $handle = fopen($_FILES['csv']['tmp_name'], "r");
        $stmt = $user->runQuery("INSERT INTO main(
                first_name,
                last_name,
                info1,
                info2,
                info3,
                info4,
                info5,
                info6,
                info7,
                info8) VALUES(
                ?,?,?,?,?,?,?,?,?,?)");
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $stmt->bindparam(1, $data[0], PDO::PARAM_STR);
            $stmt->bindparam(2, $data[1], PDO::PARAM_STR);
            $stmt->bindparam(3, $data[2], PDO::PARAM_STR);
            $stmt->bindparam(4, $data[3], PDO::PARAM_STR);
            $stmt->bindparam(5, $data[4], PDO::PARAM_STR);
            $stmt->bindparam(6, $data[5], PDO::PARAM_STR);
            $stmt->bindparam(7, $data[6], PDO::PARAM_STR);
            $stmt->bindparam(8, $data[7], PDO::PARAM_STR);
            $stmt->bindparam(9, $data[8], PDO::PARAM_STR);
            $stmt->bindparam(10, $data[9], PDO::PARAM_STR);
            $stmt->execute();
        }
        fclose($handle);
    }
}

?>

【问题讨论】:

  • $stmt-&gt;bindParam(1 在哪里?你不能从2开始。
  • 我假设runQuery() 做了准备。
  • 已更新但仍然没有 - 再次查看更新问题
  • readfile 就是这样做的:将文本输出到浏览器。 -- 也只是-&gt;execute($data) 会比很多-&gt;bindParam 调用更简单。
  • @mario 谢谢mario,我删除了所有-&gt;bindParam,只使用了-&gt;execute($data)。现在工作正常:)。

标签: php mysql csv pdo


【解决方案1】:

删除所有-&gt;bindParam 并替换为-&gt;execute($data)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2018-08-01
    • 1970-01-01
    • 2011-04-16
    • 2012-07-11
    • 2015-10-24
    相关资源
    最近更新 更多