Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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插入行组(&;MYSQL_Php_Mysql - Fatal编程技术网

使用PHP插入行组(&;MYSQL

使用PHP插入行组(&;MYSQL,php,mysql,Php,Mysql,我正在尝试将几百个文本文件中的数据加载到数据库中 我相信MYSQL正在退出循环,而没有插入所有行 有人能建议如何使用PHP代码在数据末尾插入1000行的块吗 $filenames_array = array(); foreach($filenames_array as $filename) { $file_array = file($filename); $file_value = $file_array[0]; $new_ar

我正在尝试将几百个文本文件中的数据加载到数据库中

我相信MYSQL正在退出循环,而没有插入所有行

有人能建议如何使用PHP代码在数据末尾插入1000行的块吗

$filenames_array = array();

foreach($filenames_array as $filename)
{

        $file_array     = file($filename);
        $file_value     = $file_array[0];
        $new_array  = explode(",", $file_value);
        $length         = count($new_array);


        for($i = 0; $i < $length; $i++)
        {

        $sql = "INSERT INTO `names`
            (`id`, `name`)   

            VALUES 
            ('',
            '" . $new_array[$i] . "'
            )";

        $result = mysql_query($sql) or die(mysql_error());
        echo $i . 'Row Inserted<br />';
        }

    }
$filenames\u array=array();
foreach($filenames\u数组作为$filename)
{
$file\u array=文件($filename);
$file_value=$file_数组[0];
$new\u数组=分解(“,”,$file\u值);
$length=计数($new_数组);
对于($i=0;$i<$length;$i++)
{
$sql=“插入到`名称中”`
(`id`、`name`)
价值观
('',
“$new_数组[$i]”
)";
$result=mysql\u query($sql)或die(mysql\u error());
回显$i。'插入的行
'; } }
您可能试图在一个查询中运行过多的INSERT语句

查看并准备语句,或使用如下SQL语法:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

您试图插入的条目之一是否可能包含一个引号'?在这种情况下,将发生错误,循环将无法完成

您应该始终使用mysql\u real\u escape\u字符串对插入到数据库中的值进行转义,以防止出现类似的问题,并确保不会受到攻击


为什么不把每个txt文件合并成一个大的文本文件,逐行读取呢?请参见此处的示例

主要是:

<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>


如果他处理的是几百个文本文件,我不认为多重插入语法是一个可行的解决方案?他并不是真的在一个查询中发送许多插入-总是一次只发送一个插入使用一个查询插入多行比使用多个查询快,因此如果他的脚本超时,重写它以在一个查询中插入1000行可能会有所帮助。$filenames\u数组在哪里初始化?哪个循环提前终止?for循环?为什么您确定for循环提前终止?当它终止时,是否死亡(mysql_error());语句给你任何输出?若然,原因为何?“到数据末尾的1000行块”是什么意思?你的意思是一次向现有的MySQL表中添加1000个条目吗?我没有花时间键入文件名数组。它是所有文件名的数组。我认为问题在于mysql。我之所以这样说,是因为使用phpmyadmin导出SQL会将插入分解为1500行的块。我要求做一些类似的事情。数据不包含单引号。我想这是MYSQL的问题。我有几百个文本文件。复制和粘贴所有信息违背了编写此代码的目的。MYSQL也在大约1100行插入之后退出。我需要插入大约6000行。通过将所有内容合并到一个文本文件中,我的意思不是复制和粘贴。也许您可以将所有文件的列表读取到一个数组中,使用file\u get\u contents和file\u put\u contents复制每个文件的内容,并自动完成所有操作!:)
<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>