【问题标题】:CSV values with single quotation get ignored带单引号的 CSV 值被忽略
【发布时间】:2017-09-13 13:13:15
【问题描述】:

我正在尝试通过网站将CSV 文件插入数据库。该脚本工作正常,但它不会将任何值插入到包含单引号的数据库中(例如“May's Flowers”)。我已经尝试过real_escape_string 功能和striplashes 之一,但它没有帮助。我什至尝试将变量转换为字符串。有小费吗?

部分代码:

if($_FILES["file"]["size"] > 0)
{
    $file = fopen($filename, "r");
    //skip first line
    fgetcsv($file); // first line wont show but neither the 3r
    while (($getData = fgetcsv($file, 1000)) !== FALSE)
    {
        $sql = "INSERT into accounts (accountnumber, accountname, bookccy, date) 
                values ('$getData[0]','$getData[1]','$getData[2]','$getData[3]')";
        $result = mysqli_query($conn, $sql);

【问题讨论】:

  • 使用prepared statementsbind_param。这将绕过引用您自己的价值观的需要。
  • 你能举个例子吗? @aynber
  • 阅读我链接的文档,所有的例子都在那里。

标签: php sql csv mysqli


【解决方案1】:

循环这样的文件不如使用LOAD DATA INFILE 高效。尝试这样的事情:

<?php

define("DBNAME", "databasename");
define("DBUSER", "username");
define("DBPWD", "aoeuaoeuauea");

$csvfile = "myfile.csv";


if(!file_exists($csvfile)) {
    die("Error: File not found!");
}

try {
    $dbh = new PDO("mysql:host=localhost;dbname=". DBNAME, DBUSER, DBPWD, array(PDO::MYSQL_ATTR_LOCAL_INFILE => true));

    $sql = <<<SQL
        LOAD DATA INFILE '$csvfile'
        INTO TABLE accounts
        FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
        LINES TERMINATED BY '\n'
        (accountnumber, accountname, bookccy, date)
SQL;

    $dbh->exec($sql);

} catch (PDOException $e) {
    die("An error has occured ". $e->getMessage());
}

根据 CSV 文件的编码方式,您可能需要更改 FIELDS TERMINATED BYLINES TERMINATED BY 部分。

我还使用了 HEREDOC 语法使其更整洁。如果您不熟悉 HEREDOC 语法,重要的是 SQL; 行之前或之后没有空格。 &lt;&lt;&lt;SQL 行后面也不应该有任何空格。

【讨论】:

    【解决方案2】:

    好吧,我插入了这两个(现在一个已被注释掉,但都有效)并且他们完成了工作!

    //$name = addcslashes($getData[1], "'");
      $name = mysqli_real_escape_string($conn,$getData[1]);
    

    【讨论】:

      猜你喜欢
      • 2014-02-26
      • 2013-02-11
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多