控制 PHP 中的无限循环



我通过php在mysql中插入了一些数据

此代码有效:

$i = 0;
while($i<6)
{   
    $i++;
    $params['name'] = 'test';
    $last_inserted_id = $database->insert('item',$params);//medoo databaseb lib
}

它在数据库中插入 5 行:

但是我有一个函数可以对图像产生一些影响。(它返回一些 JSON 代码)。该函数没有任何错误。

$i = 0;
    while($i<6)
    {   
        $i++;
        $_SESSION["debug_msg"][] ='counter in while:'.$i;  
        $params['name'] = 'test';
        $params['file'] = '';
        if($last_inserted_id = $database->insert('item',$params))
        {
            $proccessImageJson =  proccessImage($last_inserted_id);
            if($proccessImageJson)
            {
                $params['file'] = '$proccessImageJson';
                $database->update(TPREFIX.'item',$params,['id'=>$last_inserted_id]);
            }
        }
    }

这段代码也有效...但不是限制 5 个!也许是 40 或 50 或更多...

我该如何调整它?

我也尝试(尝试/捕获)功能部分,但我没有收到错误。

try
{
     if($proccessImageJson =  proccessImage($last_inserted_id))
     {
          $params['file'] = '$proccessImageJson';
          $database->update(TPREFIX.'item',$params,['id'=>$last_inserted_id]);
      }
  }
  catch (SomeException $e)
  {
       ob_start();
       echo 'error:';
       echo $e->getMessage();
       $_SESSION["debug_msg"][] ='function error:'.ob_get_clean();    
  }

最后,我用 $_SESSION 计算循环:

$_SESSION["debug_msg"][] ='<br>counter in while :'.$i;

它打印$i表格 1 到 5 并一次又一次地重复!

所以我认为也许 URL 调用多次。

我的真实地址: example.com?id=admin&do=insertdemo

但我改变了它,.htaccess到这个: example.com/admin/insertdemo

使用此代码:

RewriteCond %{THE_REQUEST} (?:index.php)??id=([^s&]+)&do=([^s&]+)sHTTP [NC]
RewriteRule ^ %1/%2? [L,R]
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
RewriteRule ^([^/]+)/([^/]+)/?$ index.php?id=$1&do=$2 [L,QSA]

所以我删除了 .httacess 代码,我用原始地址调用该页面:

example.com?id=admin&do=insertdemo

但是我又得到了无限循环...

我错了什么?

你的代码看起来没问题,它不应该进入无限循环。我只能向您建议一件事,即您尝试将$i++;行移动到循环的末尾,而不是在开始时。

代码

进入无限循环可能是因为代码中存在一些错误。您可以通过在代码开头添加以下行然后再次执行来检查这一点:

ini_set('display_errors', '1');

问题中显示的循环不是无限的。你有一个名为 $i 的变量,自然数的结束符号,你在每次迭代中增加它。因此,您有一个执行此循环的循环。它可以在您的 PHP 代码中,也可以重复重新加载页面,或者多个用户可能正在运行同一页面。

对于想知道我如何解决我的问题的人:

在 proccessImage 函数中,我有这个形式:

proccessImage($last_inserted_id)
{
    $this->anotherFunction();
}

原因$this->anotherFunction()

$this->anotherFunction()剂量不返回任何值。

我改变这个:

proccessImage($last_inserted_id)
 {
        if($this->anotherFunction())
        { 
            /continue
        }
 }

anotherFunction() /makes images via GD lib
{
    //some code
    return true;
}

我不知道为什么我有循环,但有了这份工作,我可以解决我的问题。

最新更新