PHP-PDO搜索查询然后更新结果

时间:2015-04-22 05:01:48

标签: php pdo

伙计们请看下面的代码。我真的不知道如何运行我的查询。我想要实现的是我将首先在我的数据库中搜索尚未完成或取消的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>

2 个答案:

答案 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'