CodingBiz更新:
我把它放在我的代码中:
for($i=1;$i<=$numRows;$i++) {
$output .= '<tr>';
$row = $this->fetchAssoc($result);
$colRow = $this->fetchAssoc($colResult);
foreach($colRow as $colName) {
$output .= "<td>".$row[$colName]."</td>";
}
$output .= '</tr>';
}
取代
for($i=1;$i<=$numRows;$i++) {
$output .= '<tr>';
$row = $this->fetchAssoc($result);
for($j=1;$j<=$colNumRows;$j++) {
$colRow = $this->fetchAssoc($colResult);
$output .= "<td>".$row[$colRow["COLUMN_NAME"]]."</td>";
}
$output .= '</tr>';
}
这有什么问题吗?
原帖:
我正在PHP类中编写一个函数来在表中显示查询结果。我自己并没有构建任何表,我希望使用PHP完成所有事情。到目前为止,这是我的代码:
function allResults($table,$cols) {
if(isset($cols)) {
$query = "SELECT $cols FROM $table";
}
else {
$query = "SELECT * FROM $table";
}
$result = $this->query($query);
$numRows = $this->numRows($result);
$colQuery ="SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='shareride' AND TABLE_NAME='$table'";
$colResult = $this->query($colQuery);
$colNumRows = $this->numRows($colResult);
$output = '<table class="allResults">';
$output .= '<tr>';
for($i=1;$i<=$colNumRows;$i++) {
$colRow = $this->fetchAssoc($colResult);
$output .= "<td>".$colRow["COLUMN_NAME"]."</td>";
}
$output .= '</tr>';
for($i=1;$i<=$numRows;$i++) {
$output .= '<tr>';
$row = $this->fetchAssoc($result);
for($j=1;$j<=$colNumRows;$j++) {
$colRow = $this->fetchAssoc($colResult);
$output .= "<td>".$row[$colRow["COLUMN_NAME"]]."</td>";
}
$output .= '</tr>';
}
$output .= '</table>';
return $output;
}
如果不清楚,query
引用mysqli_query
,numRows
引用mysqli_num_rows
,fetchAssoc
引用mysqli_fetch_assoc
。数据库名称为“shareride。”
我知道我错过了这一行:
$output .= "<td>".$row[$colRow["COLUMN_NAME"]]."</td>";
但我只是不知道它是什么。现在,我正确显示所有表列标题,并获得正确数量的内容行,但我无法使用数据库中的实际数据填充这些行。
我错过了什么?任何帮助都会非常赞赏!
答案 0 :(得分:4)
从同一结果集中获取数据和列名
<?php
$i = 0;
$colNames = array();
$data = array();
while($row = ***_fetch_assoc($res)) //where $res is from the main query result not schema information
{
//get the column names into an array $colNames
if($i == 0) //make sure this is done once
{
foreach($row as $colname => $val)
$colNames[] = $colname;
}
//get the data into an array
$data[] = $row;
$i++;
}
?>
更新:@YourCommonSense建议更换上面的代码,它工作简单,更短 - 通过我喜欢的方式获取列名称/阵列键的方式
$data = array();
while($row = mysql_fetch_assoc($res))
{
$data[] = $row;
}
$colNames = array_keys(reset($data))
继续以前:打印表格
<table border="1">
<tr>
<?php
//print the header
foreach($colNames as $colName)
{
echo "<th>$colName</th>";
}
?>
</tr>
<?php
//print the rows
foreach($data as $row)
{
echo "<tr>";
foreach($colNames as $colName)
{
echo "<td>".$row[$colName]."</td>";
}
echo "</tr>";
}
?>
</table>
测试结果
您可以看到我如何将数据检索与表生成分开。它们现在彼此依赖,您可以通过使用静态数据填充数组来测试没有数据库的表生成
您也可以将它们分成不同的功能。
答案 1 :(得分:3)
$cols
一样 - 最终会导致错误和注入。答案 2 :(得分:0)
我尝试用以下内容替换数据部分:
while($row = $this->fetchAssoc($colResult))
{
echo "<tr>";
foreach($row as $value)
{
echo sprintf("<td>%s</td>",$value)
}
echo "</tr>";
}
我知道这不是一个正确的答案,但是很难看到代码imho