【发布时间】:2015-11-06 12:00:56
【问题描述】:
我正在将数据 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 查询。 我的目标是在我的数据库中插入一个包含 9 000 个值的数组。
更新:我添加了以下几行: ini_set('memory_limit', '-1'); ini_set('max_execution_time', '-1'); 在我的mysql中添加: max_allowed_packet = 32M;
它解决了我的脚本问题!
【问题讨论】:
-
列数据类型是什么?
-
我怀疑您超出了列的数据类型所允许的长度。
-
如果是
TEXT,则使用LONGTEXT -
$add 和 $updated 是否增加。您可能会达到 PHP 内存限制,将文件放入数组而不进行任何查询。检查您的错误日志。
-
我假设您没有收到任何错误消息 - 您不会错过提及它们 ;-) 您是否检查过脚本实际上进入了该 foreach 循环?例如。通过打印
echo 'processing ', count($arr), ' items'; foreach ($arr as ...