继承人的故事,
我通过gzip上传文本文件中的部件号列表,读取成功。 格式为:
“DATE” | “TYPE” | “ID” | “FPN” | “PN” | “IOC” | “FIELD” | “OVAL” | “NVAL”
样本值:
“2013-09-10 19:19:08”|“DU”|“10161000001354”|“”|“ANTX100P001B24003”|“”|“子类别1”|“金属天线”|“PCB天线”
现在的情况是,我循环每个条目以将其插入数据库,并为用户设置通知,以查看有关该特定部件号的更新,并让他们的电子邮件稍后在其他页面中进行邮寄。
循环代码在这里:
for($x=1;$x<=count($lines)-1;$x++){
$cur_row = trim(str_replace('"','',$lines[$x]));
$cols = preg_split('/\|/',$cur_row);
$query = sprintf('INSERT INTO `notification_details`(`NDATE`, `NTYP`,`NPID`,`NFPN`,`NPN`,`NIOC`, `NFILD`, `NOV`, `NNV`) VALUES(\'%s\',\'%s\',%s,\'%s\',\'%s\',\'%s\',\'%s\',\'%s\',\'%s\')',$cols[0],$cols[1],$cols[2],$cols[3],$cols[4],$cols[5],$cols[6],$cols[7],$cols[8]);
mysql_query($query);
$query = 'SELECT DISTINCT `id` FROM `project_details` WHERE `prod_id` = \''.$cols[2].'\';';
$result = mysql_query($query);
$count = mysql_num_rows($result);
if($count>0){
$query = 'SELECT MAX(`NID`) FROM `notification_details`';
$result = mysql_query($query);
$row=mysql_fetch_array($result);
$NID = $row[0];
$query = sprintf('INSERT INTO `read_details`(`NID`, `PID`,`ISREAD`) VALUES(%s,%s,1);',$NID,$row['id']);
mysql_query($query);
}
echo $cols[2].".... Done!<br />";
flush();ob_flush();
}
//EMAIL LISTING BLOCK
echo "Listing E-mails...<br />";
$query = 'SELECT B.`proj_user`, C.`email` '
.'FROM `read_details` A, `project_details` B, `login_details` C'
.'WHERE A.`ISREAD` = 1 '
.'AND A.`PID` = B.`id` AND B.`proj_user` = C.`username` '
.'GROUP BY B.`proj_user`';
$result = mysql_query($query);
while($row=mysql_fetch_array($result)){
mysql_query('INSERT INTO `email_details`(`email`,`user`) VALUES(\''.$row[1].'\',\''.$row[0].'\')');
echo $row[1].".... Added!<br />";
}
我做了一些运动:
产品(193行)+上面代码的完整运行=内部服务器错误+整个站点在尝试访问其他页面时变为内部服务器错误
产品(193行)+减去电子邮件块=成功
产品(18,000行)+上述代码的完整运行=内部服务器错误+每当尝试访问其他页面时,整个站点都会出现内部服务器错误。
产品(18,000行)+减少电子邮件阻止=内部服务器错误+每当尝试访问其他页面时整个站点都会出现内部服务器错误。
我不知道它是否仅仅是我或者是什么,但即使是服务器返回内部服务器错误,产品也会不断添加数据库(我查看它并尝试查询计数并递增)并停在随机点,该点可以再次访问该站点。但有时它不会这样做。
有什么想法吗?提前谢谢。
编辑:
NID&amp; PID是BIGINT,ISREAD是BOOLEAN,其余是LONGTEXT
在运行时,页面是/uploadpcn.php,此代码位于/do_upload_pcn.php下 因此情况是,整个过程在/uploadpcn.php上加载,当进程结束时,浏览器将转到/do_upload_pcn.php,显示所有回声或在过程中随时显示内部服务器错误。
答案 0 :(得分:0)
尝试使用每条记录记录循环,您可能会知道哪条特定记录导致错误。您也可以应用一些try-catch
逻辑。我认为这可能是一个解析错误。
另一件需要注意的事情是,您的第一个INSERT
查询不包含字符串数据周围的single-quotes
。这可能是导致错误的另一个问题。
问题$query = sprintf('INSERT INTO
中的代码中的此查询read_details (
NID ,
PID ,
ISREAD ) VALUES(%s,%s,1);',$NID,$row['id']);
应该是这样的:
$query = sprintf('INSERT INTO `read_details` (`NID`, `PID`, `ISREAD`) VALUES (\'%s\', \'%s\', 1);', $NID, $row['id']);
我建议使用双引号来构造查询,以便您可以轻松地使用单引号作为参数。