嘿,我有一个类似ID | FIRSTNAME | NAME
的表(名称),但是当我查询所有列和行,然后将它们打包到一个HTML表中并将它们写入一个文件时,所有列都会显示两次。
$name_query = mssql_query('SELECT
*
FROM names
;');
fopen($my_file, "w");
//table tag
fwrite($my_file, '<table border="1">');
//iterate over all rows
while($row = mssql_fetch_array($name_query)) {
//start table-row for each row
fwrite($my_file, '<tr>');
//iterate over all columns
foreach($row as $entry) {
fwrite($my_file, '<td>'.$entry.'</td>');
}
//end table-row
fwrite($my_file, '</tr>');
}
//end table
fwrite($my_file, '</table>');
fclose($my_file);
(1,"Karl","Übertyp")作为HTML表的预期结果:
1 | Karl | Übertyp
但我不知怎么得了
1 | 1 | Karl | Karl | Übertyp | Übertyp
为什么会发生这种情况?我的代码中有错误吗?还是其他地方搞砸了?
我想你的html文件已经损坏:
fwrite($my_file, '<table border="1"');
应该是
fwrite($my_file, '<table border="1">');
好的,很长一段时间没有使用mssql。问题是缺少一个参数:
mssql_fetch_array($name_query,MSSQL_ASSOC)
如果您不提供MSSQL_ASSOC,那么函数将以数字AND关联数组的形式返回所有值,有效地使resut加倍;-)
另请参阅https://secure.php.net/manual/en/function.mssql-fetch-array.php
Issue是针对while循环中的每个值运行foreach循环。第一次While Loop跑步,在While foreach结束前再次跑步。
<?
$name_query = mssql_query('SELECT * FROM names;');
fopen($my_file, "w");
fwrite($my_file, '<table border="1"');
while($row = mssql_fetch_array($name_query))
{
fwrite($my_file, '<tr>');
fwrite($my_file, '<td>'.$row[0].'</td>');
fwrite($my_file, '<td>'.$row[1].'</td>');
fwrite($my_file, '<td>'.$row[2].'</td>');
fwrite($my_file, '</tr>');
}
fwrite($my_file, '</table>');
fclose($my_file);
?>