Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php can';无法在mysql中的fgetcsv上完成_Php_Mysql_Fgetcsv - Fatal编程技术网

Php can';无法在mysql中的fgetcsv上完成

Php can';无法在mysql中的fgetcsv上完成,php,mysql,fgetcsv,Php,Mysql,Fgetcsv,在小型服务器中执行1000查询可能过于昂贵 相反,您可以进行批量插入 <?php header('Content-Type: text/html; charset=utf-8'); $servername = "localhost"; $username = "root"; $password = "abc"; $dbname = "project"; $conn = new mysqli($servername, $username, $password, $dbname); if

在小型服务器中执行1000查询可能过于昂贵

相反,您可以进行批量插入

<?php
header('Content-Type: text/html; charset=utf-8');
$servername = "localhost";
$username = "root";
$password = "abc";
$dbname = "project";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$sql = "TRUNCATE TABLE datapack";
mysqli_query($conn,$sql);

if(isset($_POST['submit']))
{
     $fname = $_FILES['sel_file']['name'];
     echo 'upload file name: '.$fname.' ';
     $chk_ext = explode(".",$fname);

     if(strtolower(end($chk_ext)) == "csv")
     {
         $filename = $_FILES['sel_file']['tmp_name'];
         $handle = fopen($filename, "r");
         $head = fgetcsv($handle);
         while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
         {
            $sql= "INSERT into datapack(id,nickname,time,msg) values('$data[0]','$data[1]','$data[2]','$data[3]')";
            mysqli_query($conn,$sql);
            echo "Error: ". $conn->error;
          }
        echo "Success!";                  
     }

     else
     {
         echo "Invalid File";
     }   
}

?>
<h1>Import CSV file</h1>
<form action='<?php echo $_SERVER["PHP_SELF"];?>' method='post' enctype="multipart/form-data">
    Import File : <input type='file' name='sel_file' size='20'>
    <input type='submit' name='submit' value='submit'>
</form>

然而,这将是一个很好的机会开始使用这种情况

mysqli\u开始\u事务 开始一项交易。需要MySQL 5.6及以上版本,以及InnoDB 引擎(默认情况下已启用)。如需有关如何操作的更多详细信息 MySQL事务正常工作,请参阅»


最重要的是,您没有逃逸数据。CSV中可能有任何内容,破坏了该查询。此外,您正在限制行长度(因此,如果有长行,它们将不会被插入),并且没有检查CSV文件中的列数是否正确。尝试改变这些事情:

$sql= "INSERT into datapack(id,nickname,time,msg) values";
$sqlArray = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
    $sqlArray[] = "('$data[0]','$data[1]','$data[2]','$data[3]')";
}
$sql .= " " . implode(", ", $sqlArray);

mysqli_query($conn,$sql);
echo "Error: ". $conn->error;

导入CSV文件
导入文件:
注意,默认的HTML行为是发布到自身;通过不必要地添加
$\u服务器[“PHP\u SELF”]
您将面临脚本注入攻击

<?php
$servername = "localhost";
$username = "root";
$password = "abc";
$dbname = "project";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

if(isset($_POST['submit']))
{
    $fname = $_FILES['sel_file']['name'];
    echo "Uploaded file name: $fname";
    $chk_ext = explode(".",$fname);

    if(strtolower(end($chk_ext)) === "csv") {
        $sql = "TRUNCATE TABLE datapack";
        $conn->query($sql);
        $filename = $_FILES['sel_file']['tmp_name'];
        $handle = fopen($filename, "r");
        $head = fgetcsv($handle);
        $sql= "INSERT INTO datapack (id, nickname, time, msg) VALUES (?, ?, ?, ?)";
        $stmt = $conn->prepare($sql);

        while (($data = fgetcsv($handle)) !== FALSE) {
            if (count($data) < 4) {
                echo "Error, not 4 columns";
                continue;
            }
            $stmt->bind_param("isss", $data[0], $data[1], $data[2], $data[3]);
            if (!$stmt->execute()) {
                echo "Error: ". $stmt->error;
            } else {
                echo "Success!";
            }
        }
    else {
        echo "Invalid File";
    }
}

?>

<h1>Import CSV file</h1>
<form action="" method="post" enctype="multipart/form-data">
    Import File : <input type='file' name='sel_file' size='20'>
    <input type='submit' name='submit' value='submit'>
</form>