伙计们请看下面的代码。我真的不知道如何运行我的查询。我想要实现的是我将首先在我的数据库中搜索尚未完成或取消的DATA 然后将返回的数据更新为过期的字段为NO。 我正确运行了第一个查询,即搜索。但我不知道如何制作第二个。请帮忙。感谢。
<?php
require 'connection.php';
class updateOverdue{
private $db,$sql,$stmt,$row;
public function __construct(){
$this->db = new connection();
$this->db = $this->db->dbConnect();
}
public function updatefields(){
$this->sql = "SELECT * FROM jrf_tbl WHERE status <> 'Finished' AND status <> 'Cancelled'";
$this->stmt = $this->db->prepare($this->sql);
$this->stmt->execute();
if($this->stmt->rowCount()){
while($this->row = $this->stmt->fetch(PDO::FETCH_OBJ)){
echo "
<tbody>
<tr>
<td>",$TEST= $this->row->ID, "</td>
<td>",$this->row->strjrfnum, "</td>
<td>",$this->row->strstatus,"</td>
<td>",$this->row->strpriority,"</td>
<td>",$this->row->strdate,"</td>
<td>",$this->row->strduedate,"</td>
</tr>
</tbody>";
}
};
foreach ($TEST as $value) { /* here is my question */
$this->sql = "UPDATE jrf_tbl SET strifoverdue ='no' WHERE ID=". $value;
$this->stmt = $this->db->prepare($this->sql);
$this->stmt->execute();
}
}
}//End Class
?>
<table border=1>
<thead>
<tr>
<th>ID</th>
<th>JRF Num</th>
<th>Status</th>
<th>Priority</th>
<th>Date received</th>
<th>Due Date</th>
</tr>
</thead>
<?php
$OverDue = new updateOverdue();
$OverDue->updatefields();
?>
</table>
答案 0 :(得分:1)
您可以在一个查询中执行此操作:
UPDATE jrf_tbl SET strifoverdue ='no'
WHERE status <> 'Finished' AND status <> 'Cancelled'"
然后你的$TEST
变量不是一个数组,所以你不能循环它。它只包含查询中的最后一个值。
是的,它不会给你任何结果,因为它只是更新数据库。
但是如果你真的想要显示所有受影响的行,那么你的初始方法是可以的,但是当涉及更新查询时,你最好使用WHERE IN
而不是循环并进行单个更新每次迭代,因为您已经拥有$TEST
变量中的所有ID
答案 1 :(得分:1)
$ TEST包含id
$TEST= $this->row->ID
但是你期待,$ TEST是数组
foreach ($TEST as $value)
我认为,更好的方法是写下这样的更新查询:
UPDATE jrf_tbl SET strifoverdue ='no'
WHERE status <> 'Finished' AND status <> 'Cancelled'