phpmyadmin 如何直接或通过PHP将文本文件导入MySQL

7nbnzgx9  于 2022-11-09  发布在  PHP
关注(0)|答案(5)|浏览(207)

我需要将我的文本文件导入MySQL,它只有一个字段。它是这样的:

我也可以用PHP来实现这一点。

lnlaulya

lnlaulya1#

您可以使用MysqlLOAD DATA LOCAL INFILE语法

LOAD DATA LOCAL INFILE '/path/to/file.txt' 
    INTO TABLE 'table1'
    LINES TERMINATED BY '\n'

为此,请确保Mysql具有/path/to/file.txt的访问权限。此外,执行查询的用户必须具有 FILE 权限。
使用Pure PHP很简单。读取文件,构建查询,执行它。你需要构建查询,这样你就不会结束循环查询,这是缓慢的。

$data = file("/path/to/file.txt", FILE_SKIP_EMPTY_LINES);

// make sure you have valid database connection prior to this point.
// otherwise mysql_real_escape_string won't work
$values = "('". implode("'), ('", array_map('mysql_real_escape_string', $data)). "')";

$query = "INSERT INTO `TABLE1` (`COLUMN1`) VALUES $values";

// Now just execute the query once.
mysql_query($query);
hfyxw5xn

hfyxw5xn2#

为什么不使用一些正则表达式来基本上拆分它的新行,即。

$array = preg_split("/[\r\n]+/", file_get_contents("path/to/file.txt"));

然后执行foreach循环,即:

foreach($array as $line){
   // insert into database
}

然后,您所需要做的就是逐行填充上面的行,将其插入到数据库中的正确字段中--但请清理每一行,这样您就不会向数据库中注入任何不良内容!

lkaoscv7

lkaoscv73#

在phpMyAdmin中使用csv导入

phpMyAdmin支持CSV files导入,请查看this article以了解更多详细信息(后面的第一个结果:(phpMyAdmin csv

使用mysqlimport

Mysql提供CLI应用程序,mysqlimport,示例用法(同样是CSV):

mysqlimport --fields-optionally-enclosed-by='"' --fields-terminated-by=, \
    --lines-terminated-by="\r\n" --user=YOUR_USERNAME --password \
    YOUR_DATABASE YOUR_TABLE.csv

第1011章:我的天
Mysql本身(客户端,查询)支持LOAD DATA INFILE命令,示例语法:

LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;

使用php构建sql查询(并手动插入)

你将在php中解析文本文件,输出将是一个大的INSERT语句(当/如果你不能从你正在运行脚本的服务器连接到mysql时,这将是有用的:

// This will escape values correctly
function escapeValues( &$val){
    // mysql_real_escape_string is not an option (remote server not accessible
    // in this case)
    return "'" . addslashes( $val) . "'"; 
}

$fp = fopen( $filename, 'r') or die( 'Cannot open');
$result = array();
while( $row = fgets( $fp)){
    $values = explode( '/', $row);
    array_walk( $values, 'escapeValues');
    $results[] = '(' . implode( ', ', $values) . ')';
}

fclose( $fp);

if( !count( $results){
   die();
}

echo 'INSERT INTO tableName (col1, col2, ... colN) VALUES ';
echo implode( ",\n", $results);
echo "\n";

直接连接和直接导入

这应该是最适合您的方法。

$conn = mysql_connect( ...) or die(...);
mysql_select_db(...);

// Now we need to build small class which will allow us escape values properly
// mysql_escape_string is DEPRECATED and mysql_real_escape_string
// requires connection parameter
// Ps: choose better name
class CallbackHack {
    public $connection = null;
    public function escapeValue( &$val){
        $val = "'" . mysql_real_escape_string( $val, $this->connection) . "'";
    }
}
$hack = new CallbackHack();
$hack->connection = $conn;

$fp = fopen( $filename, 'r') or die( 'Cannot open');
mysql_query( 'BEGIN TRANSACTION;'); // Increases insert performance for InnoDb
while( $row = fgets( $fp)){
    $values = explode( '/', $row);
    array_walk( $values, array( $hack, 'escapeValue'));
    $sql = 'INSERT INTO tableName (col1, col2, ... colN) VALUES (' .
            implode( ', ', $values) . ');';
    mysql_query( $sql);
}

mysql_query( 'COMMIT;'); // Make sure it will run
fclose( $fp);
cuxqih21

cuxqih214#

<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("my_db", $con);

$file = fopen("welcome.txt", "r") or exit("Unable to open file!");
    //Output a line of the file until the end is reached

    while(!feof($file))
      {

$data = mysql_real_excape_string(fgets($file));
mysql_query("INSERT INTO Persons (filedata)
VALUES ($data)");
//make sure above query is right according to your table structure
      }
    fclose($file);

mysql_close($con);
?>
m3eecexj

m3eecexj5#

<?php
$array = preg_split("[\r\n]+", file_get_contents("path/to/file.txt"))

foreach ($array as $line) {
mysql_query("INSERT INTO `dbname` (colmun1) VALUES ('$line')");
}
?>

还要经常消毒!

相关问题