mysql - PDO 更新多行

标签 mysql pdo sql-update

说到 PDO,有点菜鸟的意思。我们有一个表需要每天使用 cron 作业进行更新。这个想法是查询表,并为每个“active = 1”从持续时间列中获取一个整数,将其转换为天数,获取“expiration”列和到期的持续时间并更新到期时间。

我还没有接近让它发挥作用,我现在只是想了解基础知识。返回以小时为单位除以 24 的持续时间,将其作为天添加到日期列中,并使用适当的新时间更新每个行。

问题是我不知道如何用自己的信息更新每一行。我有下面的代码,它更新每一行,但新的“过期”日期最终是相同的,即使过期值不同。

static function cronSetFeatured(){

    try{
        $db = new PDO('mysql:host=127.0.0.1;dbname=mydb', 'dbuser', 'pw' );
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
        echo $e->getMessage();
        die();
    }

    $query = $db->query('SELECT * FROM featured_producers ');         
    $now =  date('Y-m-d H:i:s');
    while($r = $query->fetch(PDO::FETCH_OBJ)){      
            $duration = $r->duration;
            $ddays = $duration / 24;
            $date = $r->date;
            $expires = date("Y-m-d", strtotime($date. " + ".$ddays." days"));   
        }
    $sql = "UPDATE `featured_producers` 
                    SET `expires`= ?
                    WHERE `id` != 0";

            $q = $db->prepare($sql);

            $q->execute(array($expires));
            echo $expires.'<br>';

}

最佳答案

如果您想单独更新每条记录,则该查询需要成为循环体的一部分:

while($r = $query->fetch(PDO::FETCH_OBJ)){      
    //calculate expiration
    $duration = $r->duration;
    $ddays = $duration / 24;
    $date = $r->date;
    $expires = date("Y-m-d", strtotime($date. " + ".$ddays." days"));

    //Get the id (needed for update)
    $id = $r->id;

    //updating  
    $sql = "UPDATE `featured_producers` 
            SET `expires`= ?
            WHERE `id` != ?";

    $q = $db->prepare($sql);

    $q->execute(array($expires, $id));
    echo $expires.'<br>';
}

关于mysql - PDO 更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24433156/

相关文章:

mysql - 连接到在 Docker 容器 ubuntu 16.04 上运行的 mysql

c# - 表单例份验证 没有 ASP.net 只是 C# 和 MYSQL

php - 如何在PDO中将多个查询的结果添加到数组中?

php pdo 不更新表

sql-server-2008 - SQL 更新语句 - "SET"附近的语法错误?

mysql - MySQL字段类型的重要性

mysql - 左联接 - 未知列错误

postgresql - pl/pgsql 与针对 SQL 注入(inject)攻击的准备语句

php - PDO 准备状态未给出与手动查询相同的结果

MySQL - 选择然后更新