0
나는 PHP 프로젝트를 만들었지 만 막 다른 한 줄로 인해 스크립트에서 메모리 제한이 초과되었다는 오류가 발생했습니다.사용 가능한 모든 메모리를 사용하는 스크립트의 한 줄 - 이유는 무엇입니까?
다음 문제의 라인은 방법의 일부이다 :
:public function query_all($query)
{
if (function_exists('mysqli_fetch_all')) # Compatibility layer with PHP < 5.3
$res = mysqli_fetch_all($this->query($query));
else
for ($res = array(); $tmp = mysqli_fetch_array($this->query($query));) $res[] = $tmp;
return $res;
}
이 함수는 DB 오류가있는 라인을라는 클래스의 일부가 루프와 라인
do
{
$id = rand(1000000, 9999999);
if (!Util::in_array_r($id, $db->query_all('SELECT * FROM tickets')))
{
break;
}
}
while (true);
$emailsubject = $db->escape($emailsubject);
$emailbody = $db->escape($emailbody);
$from = $db->escape($from);
$db->query("INSERT INTO tickets VALUES ($id, '$emailsubject', '$emailbody', '$from')");
foreach ($config['staff_emails'] as $email)
{
mail($email, "[$id] [NEW TICKET] $emailsubject", $emailbody, "Reply-to: $to");
}
I :
for ($res = array(); $tmp = mysqli_fetch_array($this->query($query));) $res[] = $tmp;
이 기능은 단지 다른 정책의 맨 위에, 내 코드에 한 번이라고합니다 왜 이런 일을했는지 이해하지 못해 - 결코 익숙하지 않았고 내가 바꾼 유일한 일은 모든 SQL 쿼리를 작동시키는 것뿐이었습니다 :/
왜 이런 일이 일어나는 지 아십니까? for 루프가 끝없이 실행될 수 있습니까?
감사합니다, 리암
의 싶지. 'while ($ row = mysql_fetch_array (...) {$ res [] = $ row;}'가 선호되는 방법입니다. 루프 카운터를 int 대신 배열로 초기화하여 정의되지 않은 영역입니다. 조건은 db 연산의 결과입니다. –
$ row 변수는 어디에서 왔는지 알고 싶습니다. –
루프를 처음 반복 할 때 PHP에 의해 자동으로 만들어졌습니다. –