PHP PDO查询返回最后一行

PHP PDO查询返回最后一行,php,html,Php,Html,我有下面的代码,我在我的项目中使用了其他地方的一个变体,它在其他地方都有效,但在本例中没有 $pdo = new PDO('sqlsrv:server=localhost;Database=db', 'root', 'password'); $getResultsInst = $pdo->query("SELECT distinct [names], [id] FROM [tblStaff] ORDER BY [names] asc"); while ($result = $ge

我有下面的代码,我在我的项目中使用了其他地方的一个变体,它在其他地方都有效,但在本例中没有

    $pdo = new PDO('sqlsrv:server=localhost;Database=db', 'root', 'password');
$getResultsInst = $pdo->query("SELECT distinct [names], [id] FROM [tblStaff] ORDER BY [names] asc");

while ($result = $getResultsInst->fetch(PDO::FETCH_ASSOC)) {
    $names = "<tr>
            <td>".$result['names']."</td>
            <td>Test</td>
            </tr>";
}
$pdo=newpdo('sqlsrv:server=localhost;Database=db','root','password');
$GetResultsSt=$pdo->query(“通过[names]asc从[tblStaff]订单中选择不同的[names],[id”);
而($result=$getResultsInst->fetch(PDO::fetch_ASSOC)){
$names=”
“$result['names']”
试验
";
}
当我在SQLServerManagementStudio中运行该查询时,返回的行远不止一行,但当我在HTML中运行此代码时

<table class="table table-bordered">
<thead>
  <tr>
    <th>Name</th>
    <th>ID</th>
  </tr>
</thead>
<tbody>
  <?php echo $names;?>
</tbody>

名称
身份证件


它只返回SQL查询的最后一行,我不知道为什么,因为我在别处使用了这个while循环,它为每个获取的结果创建了一个新行。

将此
$names=
更改为
$names.=
您每次都在重写值

$names = "<tr>
            <td>".$result['names']."</td>
            <td>Test</td>
            </tr>";
$names=”
“$result['names']”
试验
";

$names.=”
“$result['names']”
试验
";

使用
=
操作符而不是
=
问题的根源不是PDO,而是赋值。您正在将同一个变量分配给其他变量,这样当它完成时,它只具有最后一个值

你真的应该积累结果

与重复的字符串连接不同,我总是发现使用一个临时数组,然后在末尾连接字符串是最容易和最容易维护的

当您使用它时,您真的应该利用这样一个事实:一个
PDOStatement
对象(一个
PDO::query()
函数调用的结果)是可移植的:您可以在PHP
foreach
中使用它

以下是一个可能的替代方案:

<?php   
    //  …

    $names=array();
    foreach($getResultsInst as $result) {
        $names[]="<tr><td>{$result['names']}</td><td>Test</td></tr>";
    }
    $names=implode('',$names);
?>

每次循环时都要重置变量$names,请尝试$names“…您得到了下面的答案,还有一件事我建议您使用fetchall,然后使用循环来显示结果,而不是使用fetchin while循环。在这种情况下,您可以提高您的代码性能和最佳实践。非常感谢Sahil的可能重复,不能相信我忽略了这一点。”
<?php   
    //  …

    $names=array();
    foreach($getResultsInst as $result) {
        $names[]="<tr><td>{$result['names']}</td><td>Test</td></tr>";
    }
    $names=implode('',$names);
?>