从您的代码来看,您实际上不需要执行两个查询。如果您期望每行有 4 列,则也无需执行多个 while 循环。相反,更改查询结构以使用 JOIN;这将使您能够一次获得完整的结果集。
如前所述,请不要mysql_*在新代码中使用函数。它们不再被维护并被正式弃用。
我将向您展示如何使用 PDO 进行 JOIN,并根据您到目前为止显示的代码对您的表名和主键进行一些假设:
$pdo = new PDO("mysql:host=localhost;dbname=database", '-username-', '-password-');
$sql = '
SELECT
`players`.`id`,
`players`.`a`,
`players`.`b`,
`player_info`.`alias`,
`player_info`.`number`
FROM
`players`
LEFT JOIN
`player_info` ON `players`.id = `player_info`.`player_id`
';
$players = $pdo->query($sql);
$row_data= array();
while ($row = $players->fetch()) {
$row_data[] = '
<td>'.$row->a.' the '.$row->b.'</td>
<td>'.$row->alias.'</td>
<td>'.$row->number.'</td>
';
}
echo '<table><tr>'.implode('</tr><tr>', $row_data).'</tr></table'>;
如果连接被证明是不切实际的(不是典型的),那么你应该构建你的数据数组并生成 HTML 作为两个单独的步骤:
// gather the data
$data = array();
$first = $pdo->query($sql);
while($arow = $first->fetch()) {
$one_data['a'] = $arow->a;
$one_data['b'] = $arow->b;
$second = $pdo->query($second_sql);
while($brow = $second->fetch()) {
$one_data['alias'] = $brow->alias;
$one_data['number'] = $brow->number;
}
$data[] = $one_data;
}
// now generate HTML
print '<table>';
foreach ($data as $row) {
print '
<tr>
<td>'.$row['a'].' the '.$row['b'].'</td>
<td>'.$row['alias'].'</td>
<td>'.$row['number'].'</td>
</tr>
';
}
print '</table>';
作为旁注......名为aandb的列只是一个bad . 想法。这些列代表数据,因此为它们提供反映数据内容的标签。今天处理神秘专栏可能会很好......你记得他们的意思。6个月后?一年后?为所有列和变量使用有意义的名称——为什么不呢?
文档