Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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/8/mysql/57.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_Sql - Fatal编程技术网

使用php将数据上传到mysql

使用php将数据上传到mysql,php,mysql,sql,Php,Mysql,Sql,我试图上传我的数据到mysql,但它需要35秒,太多秒 我需要在我的代码中修改什么才能使其工作速度超过35秒 我使用php编写代码,使用SQL查询将数据发送到名为“words”的表中 在数据库的表中,我有4列('word','num','hit','instoplist') 我能做些什么来解决这个问题 谢谢 这是我的代码: <?php function removeStopWordsFromArray($words) { .......

我试图上传我的数据到mysql,但它需要35秒,太多秒

我需要在我的代码中修改什么才能使其工作速度超过35秒

我使用php编写代码,使用SQL查询将数据发送到名为“words”的表中

在数据库的表中,我有4列('word','num','hit','instoplist')

我能做些什么来解决这个问题

谢谢

这是我的代码:

<?php
    function removeStopWordsFromArray($words)
    {     
        ....... 
        insert($words);
    }

    function insert($myWords)
    {
        global $conn;

        foreach ($myWords as $key => $value) {
            $word = $value['word'];
            $number = $value['document'];
            $hit = $value['hit'];
            $stop = $value['stopList'];

             $sql = "INSERT INTO words (word,num,hit,instoplist) VALUES ('$word', '$number', '$hit','$stop')";

             if($conn->query($sql)!== TRUE)
             {
                    echo "error". $conn->error;
             }
        }

        fclose($fp);
    }

    $temp = pareseDocs();
    removeStopWordsFromArray($temp);
?>

您可以在循环外尝试此查询,但只能传递一个查询:

INSERT IGNORE INTO MyTable ( Column1, Column2 ) VALUES
    ( Value1, Value2 ), ( Value1, Value2 )
忽略错误处理

您的问题是在FOR循环中分别进行每个查询。 查看以了解有关如何在单个查询中插入多行的更多信息

如果您将方法更改为一个查询,您会发现程序的运行时间会大大缩短。

在SQLServer2008中,可以使用一个SQL语句插入多行 插入语句

INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 )
请参考MOC课程2778A-编写SQL SQL Server 2008中的查询


在您的情况下,您可以修改代码,使其看起来像下面这样

$sql = "INSERT INTO words (word, num, hit, instoplist) VALUES ";
foreach($myWords as $key => $value) {
    $word = $value['word'];
    $number = $value['document'];
    $hit = $value['hit'];
    $stop = $value['stopList'];        
    $sql .= "('$word', '$number', '$hit','$stop'),";                 
}
$sql = rtrim($sql, ',');

if($conn->query($sql) !== true) {
    echo "error".$conn->error;
}

对于正在数据库中运行查询的每个数据。但在您的案例中,正确的方法是批量插入数据。您可以按照以下方式编写代码:

    $sql = "INSERT INTO words (word,num,hit,instoplist) VALUES";
     foreach ($myWords as $key => $value) {
                $word = $value['word'];
                $number = $value['document'];
                $hit = $value['hit'];
                $stop = $value['stopList'];        
                $sql .= "('$word', '$number', '$hit','$stop'),";                 
            }
            $sql = rtrim($sql,',') //to remove last comma


            if($conn->query($sql)!== TRUE)
            {
                        echo "error". $conn->error;
            }

这将在数据库中只运行一个查询。因此会更快。

这是您经常做的事情吗?如果不只是忘记它,请通过
$values[]=”(“$word”、“$number”、“$hit”、“$stop”);“
收集值,然后将它们一起写入,就像
$sql=“INSERT-INTO-words(word、num、hit、instoplist)值一样”。内爆(“,”、$values)
如果您有太多的值,请使用
foreach(数组拼接($values,50)作为$subset){/*与以前相同的sql*/}
@e4c5,这是什么意思?如果没有帮助,请使用更多信息更新您的问题。因为
fclose($fp)中的
$fp
从何处开始来吗?复制了一半的源代码?试着只做一个大查询,而不是像人们说的那样,每次迭代只做一个查询。连接字符串而不是替换变量也很有帮助。请参阅我上面的评论,并注意
$sql.=+rtrim()
$val[]=+introde()
相比,如果数据太多,也可能使用
数组拼接()