代码没有 Return 行
Code Does Not Return Rows
我正在尝试将查询结果写入 html table。 sql 有效,但由于某些原因 table 仅显示 header 行。这应该 return 大约 15 行。语法有什么不正确的地方,我应该如何修改才能将数据写入 table?
<?php
header('Access-Control-Allow-Origin: *');
$option = array(); //prevent problems
$option['driver'] = 'mssql';
$option['host'] = 'XXX.XXX.XX.XX';
$option['user'] = 'user';
$option['password'] = 'pass';
$option['database'] = 'database';
$option['prefix'] = '';
$db = JDatabase::getInstance( $option );
$result = $db->getQuery(true);
$result->select($db->quoteName(array('Host', 'Location', 'NumberOfPlayersAttending', 'NumberOfPlayersCompeting')));
$result->from($db->quoteName('[EventInfo'));
$db->setQuery($result);
$results = $db->loadObjectList();
?>
<table border="1">
<thead>
<tr>
<th>Host</th>
<th>Location</th>
<th>NumberOfPlayersAttending</th>
<th>NumberOfPlayersCompeting</th>
</tr>
</thead>
<tbody>
<?php
foreach( $options as $option )
{
?>
<tr>
<td><?php print_r($option['Host']); ?></td>
<td><?php print_r($option['Location']); ?> </td>
<td><?php print_r($option['NumberOfPlayersAttending']); ?></td>
<td><?php print_r($option['NumberOfPlayersCompeting']); ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
编辑
同样将语法更改为 foreach( $results as $option )
只会产生 header 行,仍然没有数据被 returned.
编辑 2
这是$results
正在returning
的数据
Array ( [0] => stdClass Object ( [Host] => Red Robin [Location] => Omaha, Neb [NumberOfPlayersAttending] => 25 [NumberOfPlayersCompeting] => 13 ) )
遍历 $results
而不是 $options
,因为这是包含查询输出的变量。
更新
此外 HTML 不会为每个结果打印新行。
要修复您的代码,请使用对象运算符访问您的查询结果,因为这就是返回的内容:
<table border="1">
<thead>
<tr>
<th>Host</th>
<th>Location</th>
<th>NumberOfPlayersAttending</th>
<th>NumberOfPlayersCompeting</th>
</tr>
</thead>
<tbody>
<?php
foreach( $results as $option ) {
print "<tr>";
print "<td>".$option->Host."</td>";
print "<td>".$option->Location."</td>";
print "<td>".$option->NumberOfPlayersAttending."</td>";
print "<td>".$option->NumberOfPlayersCompeting."</td>";
print "</tr>";
}
?>
</tbody>
</table>
loadObjectList,class JDatabase returns 对象的一种方法,用于解析每一行。如您所见 here:
Method to get an array of the result set rows from the database query
where each row is an object.
重用 "option" 似乎是个问题。
改变你的循环方式并不能解决这个问题。
使用其中的数据库参数或 foreach 行更改数组的名称。 "foreach $results as $result" 在循环内进行相应的更改会更聪明。
你是对的,它不像你那样工作似乎是错误的,除非你的名字相同所以他们可能会导致问题
我正在尝试将查询结果写入 html table。 sql 有效,但由于某些原因 table 仅显示 header 行。这应该 return 大约 15 行。语法有什么不正确的地方,我应该如何修改才能将数据写入 table?
<?php
header('Access-Control-Allow-Origin: *');
$option = array(); //prevent problems
$option['driver'] = 'mssql';
$option['host'] = 'XXX.XXX.XX.XX';
$option['user'] = 'user';
$option['password'] = 'pass';
$option['database'] = 'database';
$option['prefix'] = '';
$db = JDatabase::getInstance( $option );
$result = $db->getQuery(true);
$result->select($db->quoteName(array('Host', 'Location', 'NumberOfPlayersAttending', 'NumberOfPlayersCompeting')));
$result->from($db->quoteName('[EventInfo'));
$db->setQuery($result);
$results = $db->loadObjectList();
?>
<table border="1">
<thead>
<tr>
<th>Host</th>
<th>Location</th>
<th>NumberOfPlayersAttending</th>
<th>NumberOfPlayersCompeting</th>
</tr>
</thead>
<tbody>
<?php
foreach( $options as $option )
{
?>
<tr>
<td><?php print_r($option['Host']); ?></td>
<td><?php print_r($option['Location']); ?> </td>
<td><?php print_r($option['NumberOfPlayersAttending']); ?></td>
<td><?php print_r($option['NumberOfPlayersCompeting']); ?></td>
</tr>
<?php
}
?>
</tbody>
</table>
编辑
同样将语法更改为 foreach( $results as $option )
只会产生 header 行,仍然没有数据被 returned.
编辑 2
这是$results
正在returning
Array ( [0] => stdClass Object ( [Host] => Red Robin [Location] => Omaha, Neb [NumberOfPlayersAttending] => 25 [NumberOfPlayersCompeting] => 13 ) )
遍历 $results
而不是 $options
,因为这是包含查询输出的变量。
更新
此外 HTML 不会为每个结果打印新行。
要修复您的代码,请使用对象运算符访问您的查询结果,因为这就是返回的内容:
<table border="1">
<thead>
<tr>
<th>Host</th>
<th>Location</th>
<th>NumberOfPlayersAttending</th>
<th>NumberOfPlayersCompeting</th>
</tr>
</thead>
<tbody>
<?php
foreach( $results as $option ) {
print "<tr>";
print "<td>".$option->Host."</td>";
print "<td>".$option->Location."</td>";
print "<td>".$option->NumberOfPlayersAttending."</td>";
print "<td>".$option->NumberOfPlayersCompeting."</td>";
print "</tr>";
}
?>
</tbody>
</table>
loadObjectList,class JDatabase returns 对象的一种方法,用于解析每一行。如您所见 here:
Method to get an array of the result set rows from the database query where each row is an object.
重用 "option" 似乎是个问题。 改变你的循环方式并不能解决这个问题。
使用其中的数据库参数或 foreach 行更改数组的名称。 "foreach $results as $result" 在循环内进行相应的更改会更聪明。
你是对的,它不像你那样工作似乎是错误的,除非你的名字相同所以他们可能会导致问题