Php Can';t在mysql数据库中插入9k个单词

Php Can';t在mysql数据库中插入9k个单词,php,mysql,Php,Mysql,我正在将数据txt文件插入MySQL数据库。有100-400个单词的文件插入效果很好。没问题。但是今天我得到了一个9k单词的文件,我的脚本停止了工作。它不插入或更新任何内容。我的脚本有问题吗?或者我应该将其作为该文件的一部分吗?更好的解决方案是什么 这是我的密码: //$arr - array from file; foreach ($arr as $temp) { $w_name = mysqli_real_escape_string($db_connect, $temp[0]);

我正在将数据txt文件插入MySQL数据库。有100-400个单词的文件插入效果很好。没问题。但是今天我得到了一个9k单词的文件,我的脚本停止了工作。它不插入或更新任何内容。我的脚本有问题吗?或者我应该将其作为该文件的一部分吗?更好的解决方案是什么

这是我的密码:

//$arr - array from file; 

foreach ($arr as $temp)
{
    $w_name = mysqli_real_escape_string($db_connect, $temp[0]); 
    $w_minprice = $temp[2];
    $w_js_id = $temp[1];
    $w_s = $temp[3];

    $sql ="SELECT `js_id` FROM `mytable` WHERE `js_id` = '$w_js_id' LIMIT 1"; 
    $result = mysqli_query($db_connect, $sql) or die(mysql_error()); 

    list($temp2) = mysqli_fetch_row($result);

    if ($temp2 == '')
    {
        $sql = "INSERT INTO `mytable` (`name`, `minprice`, `s`, `js_id`, `pl`) VALUES ('$w_name', '$w_minprice', '$w_s',  '$w_js_id', '$pl')";
        $result = mysqli_query($db_connect, $sql) or die(mysql_error());
        if ($result) {$added++;}
    }
    else
    {
        $sql = "UPDATE `mytable` SET `minprice` = '$w_minprice', `s` = '$g_s' WHERE `js_id` = '$w_js_id' LIMIT 1";
        $result = mysqli_query($db_connect, $sql) or die(mysql_error());
        if ($result) {$updated++;}
    }
}
也许我应该做多个查询?或者将我的查询除以10?但是怎么做呢?我不擅长MySQL查询。 我的目标是向我的数据库插入一个包含9000个值的数组

更新:我添加了以下行: ini_集('内存限制','-1'); ini_集('max_execution_time','-1'); 在my mysql中添加: 最大允许分组数=32M


它解决了我的剧本问题

可能的内存或执行时间限制问题。 尝试在php文件顶部添加以下两行

ini_set('memory_limit', '-1');
ini_set('max_execution_time', '-1');

上面关于内存限制和最大执行时间的帖子应该可以解决您的问题。要捕获任何php问题,可以添加

error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('memory_limit', '256M');
ini_set('max_execution_time', '240');
我只是想建议一种更为优化的导入方法,它可以为您节省一个查询,并且可以运行得更快

$sthi=mysqli_prepare($db_connect,"INSERT INTO `mytable` (`name`, `minprice`, `s`, `js_id`, `pl`) VALUES (?, ?, ?,  ?, ?)") or die(mysqli_error($db_connect));
$sthi->bind_param("sssss", $w_name, $w_minprice,$w_s,$w_js_id,$pl);
$sthu=mysqli_prepare($db_connect,"UPDATE `mytable` SET `minprice` = ?, `s` = ? WHERE `js_id` = ? LIMIT 1") or die(mysqli_error($db_connect));
$sthu->bind_param("sss", $w_minprice,$w_s,$w_js_id);
$i=0;
foreach ($arr as $temp) {
  $w_name = $temp[0];
  $w_minprice = $temp[2];
  $w_js_id = $temp[1];
  $w_s = $temp[3];

  @$sthi->execute();
  //If insert was unsuccessfull the record already exists
  if($sthi->affected_rows==1){
    $added++;
  }
  //Otherwise you need to update it - run the update startement
  else {
    if($sthu->execute()){
      if($sthu->affected_rows==1){
        $updated++;
      }
    }
    else echo $sthu->error."<br>";
  }
  flush();
  set_time_limit(30);

  //Not really necessary - just for debugging
  echo ++$i." u:".$updated." a:".$added."<br>";
}
$sthi=mysqli\u prepare($db\u connect,“插入到`mytable`(`name`、`minprice`、`s`、`js\u id`、`pl`)值(?、、、?、?、?)中)或die(mysqli\u error($db\u connect));
$sthi->bind_param(“ssss”、$w_name、$w_minprice、$w_s、$w_js_id、$pl);
$sthu=mysqli\u prepare($db\u connect,“UPDATE`mytable`SET`minprice`=?,`s`=?WHERE`js\u id`=?LIMIT 1”)或die(mysqli\u error($db\u connect));
$sthu->bind_param(“sss”、$w_minprice、$w_s、$w_js_id);
$i=0;
foreach($arr as$temp){
$w_name=$temp[0];
$w_minprice=$temp[2];
$w_js_id=$temp[1];
$w_s=$temp[3];
@$sthi->execute();
//如果插入失败,则记录已存在
如果($sthi->受影响的_行==1){
$added++;
}
//否则,您需要更新它-运行updatestartement
否则{
如果($sthu->execute()){
如果($sthu->受影响的_行==1){
$updated++;
}
}
else echo$sthu->错误。“
”; } 冲洗(); 设置时间限制(30); //不是真的需要-只是为了调试 echo++$i.“u:”.$已更新。“a:”.$已添加。“
”; }
列的数据类型是什么?我怀疑您超出了列的数据类型所允许的长度。如果其
文本
,则使用
长文本
增加了$added和$updated。将文件放入数组而不执行任何查询可能会达到PHP内存限制。检查您的错误日志。我假设您没有收到任何错误消息-您不会忘记提及它们;-)你检查过脚本是否真的到达了foreach循环了吗?例如,通过打印
echo“处理”,计数($arr),“项目”;弗雷奇($arr as…
否。我的循环中只有1779个回音,脚本不起作用,我可以在我的循环中添加1500次后没有回音。一切都很好。但是没有超过2000个。您的脚本将被终止。您是否在我的帖子中添加了2行并再次尝试运行脚本?您是在浏览器中还是从cli运行它?可能是页面加载timeout-您可能需要刷新输出以防止浏览器超时。错误报告(E_ALL);ini_集('display_errors',1);ini_集('memory_limit','-1');ini_集('max_execution_time','-1'));非常感谢。我要试试这个。但是我的代码即使在内存有限的情况下也无法运行。代码或多或少都很好,这将为您节省对每条记录的数据库调用,并且可能会运行得更快。我将此代码添加到我的php文件中。在浏览器中获得了500个eror。现在我甚至不能空着运行此文件。可能是什么?缺少了一个括号在update语句之后执行et。请立即重试新错误。但脚本不起作用。无操作。只是终止