PHP PDO用while和foreach内部获取表单数据

时间:2016-05-16 12:58:58

标签: php pdo

我在使用select选项填充的表单中更新数据库时遇到问题。 这是我使用MSSQL数据库中的值填充更新表单的代码:

$result = $pdo->prepare("SELECT d.id as iddr, d.EGN, d.Names, d.NickName, d.Residence, d.PersonalMobilePhone, d.HomeAddress,d.GarantPerson, c.id as cid, c.city_name, c.post_code, t.id, t.IdDriver, t.StartDateVisa, t.EndDateVisa FROM paerp.dbo.Driver d FULL JOIN paerp.dbo.cities c ON d.Residence = c.id FULL JOIN dbo.TrVisas t ON d.id = t.IdDriver WHERE d.id = :id");

$result->bindParam(':id', $id, PDO::PARAM_STR);
$result->execute();
//for($i=0; $row = $result->fetch(); $i++){
     while($row=$result->fetch(PDO::FETCH_ASSOC)){
?>

这是选择选项的地方。这仅显示数据库中的值。没有可能从下拉列表中改变。

 <select id="residence" name="residence">
<option value="<?PHP echo $row['id']; ?>" selected><?PHP echo     $row['city_name']; ?></option>
<?PHP 
$result2 = $pdo->prepare("SELECT id, city_name, post_code FROM cities");
$result2->execute();
 while($row=$result2->fetch(PDO::FETCH_ASSOC)){
?>
    <option value="<?PHP echo $row['id']; ?>"><?PHP echo $row['city_name']; ?></option>     <?php
}
?>  
    </select>

我在选择选项之后有更多输入,但它们没有填充数据库中的值。一切都停在这个下拉列表中。 同一个人可以帮助我找到正确的方法吗?谢谢! 我尝试使用foreach代替第二个while,但随后填充了表单输入,但下拉列表不起作用。

1 个答案:

答案 0 :(得分:0)

您正在执行两个查询while获取循环,其中一个嵌套在另一个循环中。可能还有其他组织逻辑的方法,例如使用fetchAll()一次从外部查询中检索所有行,然后使用foreach循环它们。

但这里的主要问题是你在两个fetch循环中使用变量名$row。这将导致内部提取覆盖$row的先前内容,从而打破了该数组未来的任何预期用途。简单地使用与$row不同的变量名称作为内部循环将有所帮助。

您可能已经看到PHP抱怨未设置的数组索引会更加贴切$row的问题。始终在开发和测试代码时,确保PHP在屏幕上显示错误。在脚本的顶部,(或在开发工作站上的php.ini中启用):

error_reporting(E_ALL);
ini_set('display_errors', 1);

确保PDO抛出有用的异常以帮助调试其行为。默认情况下,它会无声地出错。

$pdo = new PDO(/* connection details... */);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);