我有一个问题让我发疯,希望有人能提供帮助。我最近开始学习 mysql PDO,而不是旧方法。我已经整理了一个表单,它将值抓取到一个数组中,然后在循环中处理它们。我在下面对其进行了简化,以向您展示我在做什么,但问题是我让它在本地机器上运行良好,但是当它实时加载时,我认为它在 for 循环期间以某种方式丢失了 mysql 连接。
这是表格:
<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>
我认为它可能会丢失数据库连接的原因是因为我将其设置为“您选择了 $N 个名称”,并且它正确显示 N 的值 3,这意味着它应该循环 3 次,每次查询数据库每个名称的三个 ID 值。同样,它在我的本地环境中运行良好,但在实时服务器上却不行。我不明白为什么它只给我返回名字结果(约翰)而不是现场环境中的其他两个。
最后,在我的每个页面上,我都包含以下数据库连接文件
$db = new PDO('mysql:host=sitename.org;dbname=name;charset=UTF-8', 'user', 'pwd');
我希望我已经足够彻底地解释了这个问题,我猜这可能是我以某种方式忽略的简单问题。谢谢你看着它...