用php上传数据到mysql

时间:2016-09-15 13:09:06

标签: php mysql sql

我尝试将我的数据上传到mysql它的工作但它需要35秒,太多秒。

我需要在代码中更改它的工作时间超过35秒?

我使用php编写我的代码和SQL查询,将数据发送到我的表中,该表调用了" words"

在我的数据库中,我有4列('字',' num','点击',' 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);
?>

3 个答案:

答案 0 :(得分:3)

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

    $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;
            }

这将仅在DB中运行单个查询。因此会更快。

答案 1 :(得分:0)

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

INSERT IGNORE INTO MyTable ( Column1, Column2 ) VALUES
    ( Value1, Value2 ), ( Value1, Value2 )

处理错误的忽略

答案 2 :(得分:0)

您的问题是您在for循环中单独进行每个查询。

查看https://stackoverflow.com/a/452934/4988637以了解有关如何在单个查询中插入多个行的更多信息。

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

  

在SQL Server 2008中,您可以使用单个SQL插入多行   INSERT语句。

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;
}