2014-11-04 1 views
0

PHP 루프를 제출 한 후이를 사용하는 양식이 있습니다. 루프는 제출 된 양식 데이터에 따라 다음에 차례로 데이터베이스의 개별 행을 갱신합니다. 그러나 업데이트해야 할 31 개 이상의 행이 있으면 루프가 작동을 멈춘 것으로 나타났습니다. 처음 31 개 루프는 완벽하게 업데이트되지만 31 번째 루프 이후에는 작동하지 않습니다.mySQL for 루프가 31 행 업데이트 후 작동을 멈춘다. [실제 PHP 관련]

업데이트 : 나는 약간의 테스트를했는데 루프가 끝나지 않는 것 같습니다. 결과를 인쇄하는 대신 브라우저에서 페이지를 새로 고칩니다. 이 원인은 무엇입니까?

여기에 MYSQL 쿼리 설정이 있습니까?

for($i=1;$i<=$total_results2;$i++) 
{ 
$strSQL = 'UPDATE timesheets_items SET '; 
$strSQL .= 'time_1 = "' . convert_time($_POST['item_' . $i . '_time_1']) . '"'; 
$strSQL .= ', time_2 = "' . convert_time($_POST['item_' . $i . '_time_2']) . '"'; 
$strSQL .= ', time_3 = "' . convert_time($_POST['item_' . $i . '_time_3']) . '"'; 
$strSQL .= ', time_4 = "' . convert_time($_POST['item_' . $i . '_time_4']) . '"'; 
$strSQL .= ', time_5 = "' . convert_time($_POST['item_' . $i . '_time_5']) . '"'; 
$strSQL .= ', time_6 = "' . convert_time($_POST['item_' . $i . '_time_6']) . '"'; 
$strSQL .= ', time_7 = "' . convert_time($_POST['item_' . $i . '_time_7']) . '"'; 
$strSQL .= ', time_8 = "' . convert_time($_POST['item_' . $i . '_time_8']) . '"'; 
$strSQL .= ', time_9 = "' . convert_time($_POST['item_' . $i . '_time_9']) . '"'; 
$strSQL .= ', time_10 = "' . convert_time($_POST['item_' . $i . '_time_10']) . '"'; 
$strSQL .= ', time_11 = "' . convert_time($_POST['item_' . $i . '_time_11']) . '"'; 
$strSQL .= ', time_12 = "' . convert_time($_POST['item_' . $i . '_time_12']) . '"'; 
$strSQL .= ', time_13 = "' . convert_time($_POST['item_' . $i . '_time_13']) . '"'; 
$strSQL .= ', time_14 = "' . convert_time($_POST['item_' . $i . '_time_14']) . '"'; 
$strSQL .= ', time_total = "' . convert_time($_POST['item_' . $i . '_time_total']) . '"'; 
$strSQL .= ', ot_1 = "' . convert_time($_POST['item_' . $i . '_ot_1']) . '"'; 
$strSQL .= ', ot_2 = "' . convert_time($_POST['item_' . $i . '_ot_2']) . '"'; 
$strSQL .= ', ot_3 = "' . convert_time($_POST['item_' . $i . '_ot_3']) . '"'; 
$strSQL .= ', ot_4 = "' . convert_time($_POST['item_' . $i . '_ot_4']) .'"'; 
$strSQL .= ', ot_5 = "' . convert_time($_POST['item_' . $i . '_ot_5']) . '"'; 
$strSQL .= ', ot_6 = "' . convert_time($_POST['item_' . $i . '_ot_6']) . '"'; 
$strSQL .= ', ot_7 = "' . convert_time($_POST['item_' . $i . '_ot_7']) . '"'; 
$strSQL .= ', ot_8 = "' . convert_time($_POST['item_' . $i . '_ot_8']) . '"'; 
$strSQL .= ', ot_9 = "' . convert_time($_POST['item_' . $i . '_ot_9']) . '"'; 
$strSQL .= ', ot_10 = "' . convert_time($_POST['item_' . $i . '_ot_10']) . '"'; 
$strSQL .= ', ot_11 = "' . convert_time($_POST['item_' . $i . '_ot_11']) . '"'; 
$strSQL .= ', ot_12 = "' . convert_time($_POST['item_' . $i . '_ot_12']) . '"'; 
$strSQL .= ', ot_13 = "' . convert_time($_POST['item_' . $i . '_ot_13']) . '"'; 
$strSQL .= ', ot_14 = "' . convert_time($_POST['item_' . $i . '_ot_14']) . '"'; 
$strSQL .= ', ot_total = "' . convert_time($_POST['item_' . $i . '_ot_total']) . '"'; 

$strSQL .= 'WHERE week_start = "' . $week_start . '" AND employee_id = "' . $id . '" AND project_number = "' . $_POST['item_' . $i . '_project_number'] .'" AND task = "' . $_POST['item_' . $i . '_task'] .'"'; 
mysql_query($strSQL); 
} 
+2

보조 노트로 : 중첩 루프를 사용하는 것이 좋습니다. – Mikk

+2

테이블 디자인이 바뀝니다! 준비된 진술서! 부디. –

+4

와우, 폼 필드 이름에 배열을 사용하고 싶을 수도 있습니다 ... – jeroen

답변

0

내가 지금이 문제를 해결 한 :

여기 내 루프의 코드입니다! 이 문제는 내 PHP 버전 (5.3)과 양식에서 PHP가 허용하는 입력 변수의 양 때문에 발생했습니다.

문제는 결국 MySQL과 관련이 없습니다. 발견 된 버그는 PHP가 몇개의 폼 변수를 받아들이 느냐를 제한하는 것이어서, 반복 된 쿼리 루프를 실행할 시간이 왔을 때 MySQL이 그 변수를 볼 수 없도록했습니다.

이 문제를 해결하려면, 나는 희망 (1000 기본 만 허용 설정)

이 사람을 도움이 3000로 설정 (5.4 이상) PHP로 업데이트 한 후 "max_input_vars"로 설정 사람 이 같은 문제를 해결할 수 있습니다.

관련 문제