我通过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;
}
我不知道为什么我有循环,但有了这份工作,我可以解决我的问题。