나는 열매를 맺고 누군가가 도울 수 있기를 바라고있는 문제가 있습니다. 나는 최근에 기존의 방법과 반대로 mysql PDO를 배우기 시작했다. 값을 배열에 집어 넣은 다음 루프에서 처리하는 양식을 작성했습니다. 내가 뭘하는지 보여주기 위해 아래에 단순화 한 있지만 문제는 로컬 컴퓨터에서 잘 작동하지만로드 된 라이브 때 어떻게 든 for 루프 동안 mysql 연결이 손실됩니다 생각합니다.PDO가 for 루프 내에서 연결이 끊어 졌습니까?
이<form method="post" action="next.php">
<table border="1" cellspacing="2" cellpadding="3" style="font-size: 11px; font-family: arial;">
<tr>
<td><input type="checkbox" onClick="toggle(this)" /><br/></td>
<td><b>Sub Service Code</b></td>
<td><b>Criteria Value</b></td>
<td><b>Criteria Value 2</b></td>
</tr>
<tr>
<td><input type="checkbox" name="ID[]" value="2" /></td>
<td> John</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td><input type="checkbox" name="ID[]" value="3" /></td>
<td> Paul</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td><input type="checkbox" name="ID[]" value="4"checked /></td>
<td> Mary</td>
<td> </td>
<td> </td>
</tr>
</table>
<input type="submit" value="Submit" name="next">
</form>
내가이 양식을 처리하기 위해 사용하고있는 PHP 스크립트는 다음과 같습니다 : 여기
양식 인 로컬이 아닌 환경에서<?php
if (isset($_POST['next'])) {
?>
<form method="post" action="next-2.php">
<table border="1" cellspacing="2" cellpadding="3" style="font-size: 11px; font-family: arial;">
<tr>
<td><input type="checkbox" onClick="toggle(this)" /><br/></td>
<td><b>Name</b></td>
<td><b>Value</b></td>
<td><b>Value 2</b></td>
<td><b>Select # of Levels</b></td>
</tr>
<?php
$id = $_POST['ID'];
if (empty($id)) {
echo("<p>You didn't select any names.</p>");
} else {
$N = count($id);
echo("<p>You selected $N names(s):</p>");
for($i=0; $i < $N; $i++) {
//echo($id[$i] . " ");
$stmt = $db->query('SELECT * FROM services_main');
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if ($row['ID'] == $id[$i]) {
echo '
<tr>
<td><input type="checkbox" name="ID[]" value="'.$row['ID'].'" checked /></td>
<td> '.$row['Name'].'</td>
<td> '.$row['Value'].'</td>
<td> '.$row['Value 2'].'</td>
<td>
<select name="rate_'.$row['ID'].'" >
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</td>
</tr>';
}
}
}
}
}
?>
</table>
<input type="submit" value="Submit" name="next-2">
</form>
,이 무엇입니까 :
<form method="post" action="next-2.php">
<table border="1" cellspacing="2" cellpadding="3" style="font-size: 11px; font-family: arial;">
<tr>
<td><input type="checkbox" onClick="toggle(this)" /><br/></td>
<td><b>Name</b></td>
<td><b>Value</b></td>
<td><b>Value 2</b></td>
<td><b>Select # of Levels</b></td>
</tr>
<p>You selected 3 names(s):</p>
<tr>
<td><input type="checkbox" name="ID[]" value="2" checked /></td>
<td> John</td>
<td> </td>
<td> </td>
<td>
<select name="rate_2" >
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
</td>
</tr>
</table>
<input type="submit" value="Submit" name="next-2">
</form>
내가 db 연결을 잃을 수 있다고 생각하는 이유는 '사용자가 $ N 개의 이름을 선택했습니다.'라고 설정했기 때문입니다. N의 값에 대해 3을 올바르게 나타내고 있습니다. 이는 각 이름에 대한 3 개의 ID 값 각각에 대해 매번 db를 쿼리하는 3 번 반복해야 함을 의미합니다. 다시 말하지만, 로컬 환경에서는 완벽하게 작동하지만 라이브 서버에서는 정상적으로 작동하지 않습니다. 나는 왜 그것이 단지 살아있는 환경에서 다른 두 사람도 아닌 첫 번째 이름 결과 (John)를 돌려주는 이유를 이해할 수 없다.
마지막으로, 내 각 페이지에 나는 내가 철저하게 충분히이 문제를 설명했고 나는 아마 내가 어떻게 든 내려다하고 간단한 뭔가 같은데요 희망 다음 DB 연결이
$db = new PDO('mysql:host=sitename.org;dbname=name;charset=UTF-8', 'user', 'pwd');
파일을 포함하고있다. 그것을 보아 주셔서 감사합니다 ...
이 라인의 의도가 무엇인가하는 경우 ($ 행 [ 'ID'] == $ 아이디 [$ I])? 당신이 그것을 주석 처리한다면 어떻게됩니까? – blearn
while 루프 다음에'$ stmt-> closeCursor()'를 추가해보십시오. 또한 왜 각 ID에 대한 데이터베이스에서 모든 것을 가져 오는 중입니까? 왜 SELECT * FROM services_main WHERE ID IN (...) 쿼리를 만들지 않겠습니까? 이것은 훨씬 더 빨리 실행됩니다. – cdhowie
어디에 문제가 있습니까? 여기에 어떤 질문도 표시되지 않습니다. –