Php 导致内部服务器错误的循环或查询
故事是这样的 我正在通过gzip上传文本文件中的零件号列表,读取成功。 格式为: “日期”|“类型”|“ID”|“FPN”|“PN”|“IOC”|“字段”|“椭圆形”|“NVAL” 样本值: “2013-09-10 19:19:08”“DU”“1016100001354”“ANTX100P001B24003”“子类别1”“金属天线”“PCB天线” 现在的场景是,我在每个条目上循环,将其插入数据库,并设置通知,让用户看到关于某个零件号的更新,并让他们的电子邮件稍后在另一个页面中进行邮寄 循环代码如下所示:Php 导致内部服务器错误的循环或查询,php,loops,for-loop,internal-server-error,Php,Loops,For Loop,Internal Server Error,故事是这样的 我正在通过gzip上传文本文件中的零件号列表,读取成功。 格式为: “日期”|“类型”|“ID”|“FPN”|“PN”|“IOC”|“字段”|“椭圆形”|“NVAL” 样本值: “2013-09-10 19:19:08”“DU”“1016100001354”“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 />";
}
($x=1;$x0)的{
$query='从'notification_details'中选择MAX('NID');
$result=mysql\u query($query);
$row=mysql\u fetch\u数组($result);
$NID=$row[0];
$query=sprintf('INSERT INTO'read_details'('NID','PID','ISREAD')值(%s,%s,1);',$NID,$row['id']);
mysql\u查询($query);
}
echo$cols[2]。“…完成!
”;
冲洗();ob_flush();
}
//电子邮件列表块
echo“列出电子邮件…
”;
$query='选择B.`proj_user`,C.`email`'
.'read_details`A、`project_details`B、`login_details`C'
其中A.`ISREAD`=1'
和A.`PID`=B.`id`和B.`proj_user`=C.`username`'
.“分组依据B.‘项目用户’”;
$result=mysql\u query($query);
while($row=mysql\u fetch\u数组($result)){
mysql\u查询('插入'email\u详细信息'('email','user')值(\'.$row[1].\',\'.$row[0].\');
echo$行[1]。“…已添加!
”;
}
以下是我做的一些跑步:
因此,场景是,在/uploadpcn.php上加载整个过程,当过程结束时,浏览器将转到/do_upload_pcn.php,显示过程中的所有回音或显示内部服务器错误。尝试用每个记录记录循环,您可能会知道是哪个特定记录导致了错误。您还可以应用一些
try-catch
逻辑。我想这可能是一个解析错误
另一件需要注意的事情是,您的第一个INSERT
查询在字符串数据周围不包含单引号。这可能是导致错误的另一个问题
编辑:
此查询在问题$query=sprintf('INSERT in
read_details,
PID,
ISREAD)值(%s,%s,1);',$NID,$row['id'])中的代码中代码>应类似于:
$query = sprintf('INSERT INTO `read_details` (`NID`, `PID`, `ISREAD`) VALUES (\'%s\', \'%s\', 1);', $NID, $row['id']);
我建议在构造查询时使用双引号,这样您就可以轻松地在参数中使用单引号
谢谢你的快速回复好先生!关于引号,它得到了引号\'%s\'哦!我忘了添加,NID&NPID是BIGINT,其余是LONGTEXT:)查找Apache错误日志。