Php 无效的forEach()
我有一个数据库,存储用户根据日期添加的读数,我想根据最近添加的读数在HTML页面上显示读数,因此我修改了我的语句,如下所示:Php 无效的forEach(),php,pdo,Php,Pdo,我有一个数据库,存储用户根据日期添加的读数,我想根据最近添加的读数在HTML页面上显示读数,因此我修改了我的语句,如下所示: public function getElecReadings(){ try { $stmt = $this->dbconn->prepare("SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings ORDER BY DESC WHERE Accoun
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings ORDER BY DESC WHERE AccountNumber = '" . $_SESSION['user_session'] . "'");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings WHERE AccountNumber = '" . $_SESSION['user_session'] . "' ORDER BY DESC");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
<?php
if (!empty($elec_readings)):
foreach ($elec_readings as $elec_reading): ?>
<tbody>
<tr>
<td><?php echo $elec_reading['ElecUsage']; ?></td>
<td><?php echo $elec_reading['DateAdded']; ?></td>
</tr>
?php
endforeach;
endif;
?>
然而,一旦我添加了orderby
子句,我似乎在我的HTML页面上得到了警告:为foreach()提供的参数无效
<?php
foreach ($elec_readings as $elec_reading): ?>
<tbody>
<tr>
<td><?php echo $elec_reading['ElecUsage']; ?></td>
<td><?php echo $elec_reading['DateAdded']; ?></td>
</tr>
?php
endforeach;
?>
?php
endforeach;
?>
知道为什么会这样吗 试着这样做:
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings ORDER BY DESC WHERE AccountNumber = '" . $_SESSION['user_session'] . "'");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings WHERE AccountNumber = '" . $_SESSION['user_session'] . "' ORDER BY DESC");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
<?php
if (!empty($elec_readings)):
foreach ($elec_readings as $elec_reading): ?>
<tbody>
<tr>
<td><?php echo $elec_reading['ElecUsage']; ?></td>
<td><?php echo $elec_reading['DateAdded']; ?></td>
</tr>
?php
endforeach;
endif;
?>
公共函数getElecReadings(){
试一试{
$stmt=$this->dbconn->prepare(“选择ElecReadingID,ElecUsage,DateAdded FROM elec_readings,其中AccountNumber=””)“$_SESSION['user_SESSION']。”“'ORDER BY DESC”);
$stmt->execute();
返回$stmt;
}捕获(例外$e){
}
}
?php
endforeach;
endif;
?>
试着这样做:
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings ORDER BY DESC WHERE AccountNumber = '" . $_SESSION['user_session'] . "'");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
public function getElecReadings(){
try {
$stmt = $this->dbconn->prepare("SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings WHERE AccountNumber = '" . $_SESSION['user_session'] . "' ORDER BY DESC");
$stmt->execute();
return $stmt;
} catch (Exception $e) {
}
}
<?php
if (!empty($elec_readings)):
foreach ($elec_readings as $elec_reading): ?>
<tbody>
<tr>
<td><?php echo $elec_reading['ElecUsage']; ?></td>
<td><?php echo $elec_reading['DateAdded']; ?></td>
</tr>
?php
endforeach;
endif;
?>
公共函数getElecReadings(){
试一试{
$stmt=$this->dbconn->prepare(“选择ElecReadingID,ElecUsage,DateAdded FROM elec_readings,其中AccountNumber=””)“$_SESSION['user_SESSION']。”“'ORDER BY DESC”);
$stmt->execute();
返回$stmt;
}捕获(例外$e){
}
}
?php
endforeach;
endif;
?>
是。您的SQL查询现在已损坏。订单是在何处关闭后发出的
(SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings WHERE [your_condition] ORDER BY [Your_Field] DESC|ASC ");
Foreach显示错误导致SQL查询失败,并且$elec\u reads
为空(或FALSE)是。您的SQL查询现在已损坏。订单是在何处关闭后发出的
(SELECT ElecReadingID, ElecUsage, DateAdded FROM elec_readings WHERE [your_condition] ORDER BY [Your_Field] DESC|ASC ");
Foreach显示错误导致SQL查询失败,$elec\u reads
为空(或FALSE)由于查询无效,您将收到警告
,如果要使用ORDER BY with WHERE子句,则需要遵循以下顺序:
SELECT .. FROM .. WHERE .. ORDER BY ..
修改的查询:
$stmt = $this->dbconn->prepare("
SELECT ElecReadingID, ElecUsage, DateAdded
FROM elec_readings
WHERE AccountNumber = '" . $_SESSION['user_session'] . "'
ORDER BY ElecReadingID DESC");
请注意,您还需要指定更改顺序所需的列,在上面的示例中,我使用的是order BY DESC
中的ElecReadingID
列,因为您的查询无效,如果要使用order BY with WHERE子句,则需要遵循以下顺序:
SELECT .. FROM .. WHERE .. ORDER BY ..
修改的查询:
$stmt = $this->dbconn->prepare("
SELECT ElecReadingID, ElecUsage, DateAdded
FROM elec_readings
WHERE AccountNumber = '" . $_SESSION['user_session'] . "'
ORDER BY ElecReadingID DESC");
注意,您还需要指定更改顺序所需的列,在上面的示例中,我使用的是orderbydesc
中的ElecReadingID
列,您没有从结果集中获取数据!!那么,$elec_readings
包含什么呢?@Saty这是不必要的,PDOStatement
类实现了可遍历的
,所以你可以循环它来获得结果。谢谢@jeroen提供的信息。我会记住这件事@T91我已回滚您的编辑,因为如果您更正问题本身中的错误,答案将不再有意义。您没有从结果集中获取数据!!那么,$elec_readings
包含什么呢?@Saty这是不必要的,PDOStatement
类实现了可遍历的
,所以你可以循环它来获得结果。谢谢@jeroen提供的信息。我会记住这件事@T91我已经回滚了您的编辑,因为如果您更正问题本身中的错误,答案将不再有意义。现在没有显示任何内容,只是一个空表。您的查询不会返回任何内容。您的查询中有一些问题。当我在WHERE
条款之后添加ORDER BY
时,它会起作用。这是规则orderby
在WHERE
之后。现在不显示任何内容,只显示一个空表您的查询不返回任何内容。您的查询中有一些问题。当我在WHERE
条款之后添加ORDER BY
时,它会起作用。这是规则<代码>按
排序,在WHERE
之后。这似乎可行,但我只想限制添加的最新3个,当我添加限制3
时,它会显示3,但不会显示最后一个3@T91您似乎没有按任何字段排序,请检查答案中的代码。编辑了我的原始帖子,这回答了我的问题!这似乎可行,但我只想限制最近添加的3,当我添加限制3
时,它会显示3,但不会显示最后一个3@T91您似乎没有按任何字段排序,请检查答案中的代码。编辑了我的原始帖子,这回答了我的问题!