Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 导致内部服务器错误的循环或查询_Php_Loops_For Loop_Internal Server Error - Fatal编程技术网

Php 导致内部服务器错误的循环或查询

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天线” 现在的场景是,我在每个条目上循环,将其插入数据库,并设置通知,让用户看到关于某个零件号的更新,并让他们的电子邮件稍后在另一个页面中进行邮寄 循环代码如

故事是这样的

我正在通过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]。“…已添加!
”; }
以下是我做的一些跑步:

  • 产品(193行)+上面代码的完整运行=内部服务器错误+每当试图访问其他页面时,整个站点都会处于内部服务器错误之下

  • 产品(193行)+减去电子邮件块=成功

  • 产品(18000行)+以上代码的完整运行=内部服务器错误+每当试图访问其他页面时,整个站点都会处于内部服务器错误之下

  • 产品(18000行)+减去电子邮件块=内部服务器错误+每当试图访问其他页面时,整个站点都会处于内部服务器错误之下

  • 我不知道它是否只是我或什么,但即使服务器返回内部服务器错误,产品也会不断添加到数据库中(我查看它并尝试查询计数,它会增加),并在随机点停止,该点站点再次变得可访问。但有时它不这样做

    有什么想法吗?提前谢谢

    编辑:

    NID&PID是BIGINT,ISREAD是BOOLEAN,其余是LONGTEXT

    另外,在运行时,页面是/uploadpcn.php,此代码位于/do_upload_pcn.php下
    因此,场景是,在/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错误日志。