【问题标题】:query runs one time in PHP查询在 PHP 中运行一次
【发布时间】:2018-01-28 21:24:36
【问题描述】:

我使用 while 循环创建了一个 PHP 文件,当我使用 cron 作业运行我的 PHP 文件时,它只运行一次!

/usr/bin/wget -O /dev/null http://alhyipmonitors.com/sites.php 1>/dev/null 2>&1

我的监视器数据库表中有 22 个监视器 ID,我从中进行选择。

这是我的代码:

$q='select * from `monitors`';
            $result=@mysql_query($q);
            while($row=@mysql_fetch_array($result))
            {
            $mid =  $row['mid'];

    $q='select * from `monitors` where `mid`="'.$mid.'"';
    $result=mysql_query($q);
    $row=mysql_fetch_array($result);
    echo'<h2>'.$row['monitor_url'].'</h2>';

        if($row['robot_target'])
        {
            $url=$row['robot_target'];
            $ch=curl_init();
            curl_setopt($ch, CURLOPT_URL,$url);
            $handle=fopen('src.txt','w');
            curl_setopt($ch, CURLOPT_FILE, $handle);
            curl_exec($ch);
            curl_close($ch);
            fclose($handle);
            $handle=fopen('src.txt','r');
            $html_code=fread($handle, filesize('src.txt'));
            fclose($handle);

            if($html_code!='')
            {
                if(preg_match_all($row['robot_pattern'], $html_code, $match))
                {
                    $i=0;
                    $j=0;
                    while($j<=50 && $match[$row['robot_id_index']][$i] && $match[$row['robot_key_index']][$i])
                    {
                        $id=$match[$row['robot_id_index']][$i];
                        $key1=$match[$row['robot_key_index']][$i];
                        $key2=remove_extra_in_url($key1);
                        $key3=remove_extra_in_string($key1);
                        $key4=str_replace(' ','-',$key1);
                        $button=$row['button_pattern'].$id.$row['end_button_pattern'];

                        $details=$row['details_pattern'].$id.$row['end_details_pattern'];
                        echo $i.'. ID= <b>'.$id.'</b>, KEY1= <b>'.$key1.'</b>, KEY2= <b>'.$key2.'</b>, KEY3= <b>'.$key3.'</b>, KEY4= <b>'.$key4.'</b>, <a href="'.$button.'" target="_blank">BUTTON</a>, <a href="'.$details.'" target="_blank">DETAILS</a><br/>';
                        $q='select * from `buttons` where `button_url`="'.$button.'"';

                        if($num=mysql_num_rows(mysql_query($q))==0)
                        { 
                            $q='select * from `programs` where `url` like "%'.$key1.'%" or `url` like "%'.$key2.'%" or `url` like "%'.$key3.'%" or `url` like "%'.$key4.'%" or `url`="'.$key2.'" order by `pid` desc';
                            $result=mysql_query($q);
                            $num=mysql_num_rows($result);
                            if($num==1)
                            {
                                $program=mysql_fetch_array($result);
                                $piid = $program['pid'];
                                $urll = $program['url'];

                                // Attempt update query execution

$data='update `programs` set `monitors`=`monitors`+1 where pid="'.$program['pid'].'" and url="'.$program['url'].'"';

$val=mysql_query($data);
if($val == 1){

    $q='insert into `buttons` values("","'.$program['pid'].'","'.$row['mid'].'","'.$details.'","'.$button.'")';
                                if(mysql_query($q))
                                    echo'<div class="green">'.$program['url'].' -> Added.</div>';
                                $j++;                           
}                           

                            }
                            elseif($num>1)
                            {
                                while($program=mysql_fetch_array($result))
                                {
                                    echo'<div class="blue">'.$program['url'].' [ <a href="fr.php?a=add_button&mid='.$row['mid'].'&pid='.$program['pid'].'&bid='.$id.'" target="_blank">ADD FOR THIS PROGRAM</a> ]</div>';
                                }
                                $j++;
                            }
                            else
                                echo'<b style="color: red;">Not Found</b><br/>';
                    }
                        else
                            echo'<b style="color: green;">Button URL is already exist</b><br/>';
                        echo'<br/><hr/>';   
                        $i++;
                    }
                }
                else
                    echo'Preg Match -> Not Found';
            }
            else
                echo'file get contents -> error';
        }
        else
            echo'robot target -> not fount';
    }   

欢迎任何帮助,在此先感谢!

【问题讨论】:

  • 请您正确缩进您的代码。它确实有助于使代码更具可读性。
  • 不要使用 已弃用且不安全 mysql_*-functions。它们自 PHP 5.5(2013 年)以来已被弃用,并在 PHP 7(2015 年)中完全删除。请改用 MySQLi 或 PDO。
  • 我亲爱的 Magnus Eriksson 你能用你所说的观点给我完整的代码
  • 我们不是来为您完成工作的。使用 PHP 手册并搜索有关 mysqli 或 pdo 的教程。
  • 为什么首先从monitors 获取所有 行,然后在遍历结果时再次获取每一行?此时,您已经在变量 $row 中获得了该行的结果。

标签: php mysql database cron


【解决方案1】:

因为你在while循环中重置了$result,为了解决它重命名内部$result为另一个,我已经指定了cmets编辑的行

<?php

$q='select * from `monitors`';
            $result=@mysql_query($q);
            while($row=@mysql_fetch_array($result))
            {
            $mid =  $row['mid'];

    $q='select * from `monitors` where `mid`="'.$mid.'"';
    $result=mysql_query($q);
    $row=mysql_fetch_array($result);
    echo'<h2>'.$row['monitor_url'].'</h2>';

        if($row['robot_target'])
        {
            $url=$row['robot_target'];
            $ch=curl_init();
            curl_setopt($ch, CURLOPT_URL,$url);
            $handle=fopen('src.txt','w');
            curl_setopt($ch, CURLOPT_FILE, $handle);
            curl_exec($ch);
            curl_close($ch);
            fclose($handle);
            $handle=fopen('src.txt','r');
            $html_code=fread($handle, filesize('src.txt'));
            fclose($handle);

            if($html_code!='')
            {
                if(preg_match_all($row['robot_pattern'], $html_code, $match))
                {
                    $i=0;
                    $j=0;
                    while($j<=50 && $match[$row['robot_id_index']][$i] && $match[$row['robot_key_index']][$i])
                    {
                        $id=$match[$row['robot_id_index']][$i];
                        $key1=$match[$row['robot_key_index']][$i];
                        $key2=remove_extra_in_url($key1);
                        $key3=remove_extra_in_string($key1);
                        $key4=str_replace(' ','-',$key1);
                        $button=$row['button_pattern'].$id.$row['end_button_pattern'];

                        $details=$row['details_pattern'].$id.$row['end_details_pattern'];
                        echo $i.'. ID= <b>'.$id.'</b>, KEY1= <b>'.$key1.'</b>, KEY2= <b>'.$key2.'</b>, KEY3= <b>'.$key3.'</b>, KEY4= <b>'.$key4.'</b>, <a href="'.$button.'" target="_blank">BUTTON</a>, <a href="'.$details.'" target="_blank">DETAILS</a><br/>';
                        $q='select * from `buttons` where `button_url`="'.$button.'"';

                        if($num=mysql_num_rows(mysql_query($q))==0)
                        { 
                            $q='select * from `programs` where `url` like "%'.$key1.'%" or `url` like "%'.$key2.'%" or `url` like "%'.$key3.'%" or `url` like "%'.$key4.'%" or `url`="'.$key2.'" order by `pid` desc';
                            $innser_result=mysql_query($q); // Here change $result to $inner_result or what you want
                            $num=mysql_num_rows($innser_result); // Here change $result to $inner_result or what you want
                            if($num==1)
                            {
                                $program=mysql_fetch_array($innser_result); // Here change $result to $inner_result or what you want
                                $piid = $program['pid'];
                                $urll = $program['url'];

                                // Attempt update query execution

$data='update `programs` set `monitors`=`monitors`+1 where pid="'.$program['pid'].'" and url="'.$program['url'].'"';

$val=mysql_query($data);
if($val == 1){

    $q='insert into `buttons` values("","'.$program['pid'].'","'.$row['mid'].'","'.$details.'","'.$button.'")';
                                if(mysql_query($q))
                                    echo'<div class="green">'.$program['url'].' -> Added.</div>';
                                $j++;                           
}                           

                            }
                            elseif($num>1)
                            {
                                while($program=mysql_fetch_array($innser_result)) // Here change $result to $inner_result or what you want
                                {
                                    echo'<div class="blue">'.$program['url'].' [ <a href="fr.php?a=add_button&mid='.$row['mid'].'&pid='.$program['pid'].'&bid='.$id.'" target="_blank">ADD FOR THIS PROGRAM</a> ]</div>';
                                }
                                $j++;
                            }
                            else
                                echo'<b style="color: red;">Not Found</b><br/>';
                    }
                        else
                            echo'<b style="color: green;">Button URL is already exist</b><br/>';
                        echo'<br/><hr/>';   
                        $i++;
                    }
                }
                else
                    echo'Preg Match -> Not Found';
            }
            else
                echo'file get contents -> error';
        }
        else
            echo'robot target -> not fount';
    }   

【讨论】:

  • 我尝试使用您的代码,但它仍然运行一次,我的意思是只获得 1st $mid = 1 您可以在此处查看:alhyipmonitors.com/fr.php
【解决方案2】:

在我看来,您在循环中重用了变量 $result。

$q = 'select * from `monitors`';
$result = @mysql_query($q);
while( $row = @mysql_fetch_array($result) ) // <-- $result var
{
    $mid =  $row['mid'];

    $q = 'select * from `monitors` where `mid`="'.$mid.'"';

    // $result = mysql_query($q); // <--- overwrite $result var
    $result1 = mysql_query($q);  // <--- use a different var name
    $row = mysql_fetch_array($result1); // <--- change here too
    echo'<h2>'.$row['monitor_url'].'</h2>';
    // more code etc
}

【讨论】:

  • 请你给我完整的代码因为我试过这个'$q='select * from monitors'; $result=@mysql_query($q); while($row=@mysql_fetch_array($result)) { echo'

    '.$row['monitor_url'].'

    '; ' 但它也运行一次
  • 我已经尝试过你的代码,但它仍然运行一次我的意思是只获得第一个 $mid
  • 编辑您的问题并添加您的表定义,并提供一些进入该表的示例数据。解释你想要完成什么。缩进你的代码。
  • @AyanAbraiz 那是因为您在代码中多次重复使用$result$row。 (可能还有更多变量)。最快的解决方法,不要重复使用变量名。
猜你喜欢
  • 2013-05-14
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多