php - 将多行数据插入多列数据库表

标签 php mysql database

包含由 ; 分隔的三个数据项组的文本文件; 要插入到 mysql 数据库表的三列中,该文本文件被插入到单个列中。在SO上找到了一段代码,并根据要求进行了修改,但仍然无法按要求工作。知道可能出什么问题吗?谢谢!

num.txt

one
two
three;
four
five
six;  
...

测试.php

<?php
$db = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$db) {
    die('Could not connect: ' . mysql_error());
    }

$filename = "num.txt";
$handle   = fopen($filename, 'r');
$data     = fread($handle, filesize($filename));
$rowsArr  = explodeRows($data);

function explodeRows($data) {
    $rowsArr = explode(";", $data);
    return $rowsArr;
    }

for($i=0;$i<count($rowsArr);$i++) {
    $cols = explodeRows($rowsArr[$i]);
    mysql_select_db("test", $db);
    $query = sprintf('INSERT INTO voter (fname, lname, add) VALUES ("%s", "%s", "%s")', $cols[0], $cols[1], $cols[2]);

    if (!mysql_query($query,$db))
    {
    die('Error: ' . mysql_error());
    }
    echo "1 record added";
    }
fclose($handle);
mysql_close($db);
?>

上面的输出:

fname | lname |  add

one   |       |
two   |       |
three |       |
---------------------
four  |       |
five  |       |
six   |       |
---------------------
...

上述代码错误

Notice: Undefined offset: 1 in D:\xampp\htdocs\test.php on line 20
Notice: Undefined offset: 2 in D:\xampp\htdocs\test.php on line 20
1 record added

需要输出

fname |lname  |add

one   | two   |three
---------------------
four  | five  |six
---------------------
...  

最佳答案

您可以使用简单的 MySQL 解决方法 -

LOAD DATA INFILE 'test.txt' INTO TABLE table1
  FIELDS TERMINATED BY '\r\n'
  LINES TERMINATED BY ';\r\n'
  (column1, column2, @var)
  SET column3 = TRIM(TRAILING ';' FROM @var)

只需指定您的表/列/文件名。

LOAD DATA INFILE Syntax .

关于php - 将多行数据插入多列数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18864303/

相关文章:

php - 字符串分钟数中缺少零

php - 升级到 Symfony 2.8 后出现 MappingException

php - 未收到来自 GCM 服务器的消息

mysql - 基于连接表的 group by 计数的不同 where 子句列

android - 在 Android 的 Assets 文件夹中复制两个 SQLite 数据库

php - 如何将 isAdmin() 更改为 $session->isAdmin

mysql - 为什么 MySQL 索引在原始计算机的 AMI 副本中不起作用?

php - 违反完整性约束 : 1048 Column 'name' cannot be null

sql - MS SQL Server 查询缓存

sql - 如何从有关系的 2 个表中删除一条记录?