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