Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql PDO更新多行_Mysql_Pdo_Sql Update - Fatal编程技术网

Mysql PDO更新多行

Mysql PDO更新多行,mysql,pdo,sql-update,Mysql,Pdo,Sql Update,在PDO方面有点麻烦。我们有一个需要每天用cron作业更新的表。其思想是查询表,并为每个“active=1”从duration列中获取一个整数,将其转换为天,获取“expiration”列和到期的持续时间,并更新到期时间 我甚至还没有接近让这项工作,我只是试图得到基本的现在。返回以小时为单位除以24的持续时间,将其作为天添加到日期列中,并使用适当的新时间更新每一行 问题是我不知道如何用每一行自己的信息更新每一行。我有下面的代码,它会更新每一行,但是新的“expires”日期最终是相同的,即使ex

在PDO方面有点麻烦。我们有一个需要每天用cron作业更新的表。其思想是查询表,并为每个“active=1”从duration列中获取一个整数,将其转换为天,获取“expiration”列和到期的持续时间,并更新到期时间

我甚至还没有接近让这项工作,我只是试图得到基本的现在。返回以小时为单位除以24的持续时间,将其作为天添加到日期列中,并使用适当的新时间更新每一行

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

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>';

}
静态函数cronSetFeatured(){
试一试{
$db=newpdo('mysql:host=127.0.0.1;dbname=mydb','dbuser','pw');
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
}捕获(PDO$e){
echo$e->getMessage();
模具();
}
$query=$db->query('SELECT*FROM featured_producer');
$now=日期('Y-m-d H:i:s');
而($r=$query->fetch(PDO::fetch_OBJ)){
$duration=$r->duration;
$ddays=$duration/24;
$date=$r->date;
$expires=date(“Y-m-d”,strotime($date.+”)“$ddays.”天);
}
$sql=“UPDATE`featured\u producer`
设置'expires`=?
其中'id`!=0';
$q=$db->prepare($sql);
$q->execute(数组($expires));
echo$过期。“
”; }
如果您想自己更新每条记录,那么该查询需要成为循环体的一部分:

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>';
}
while($r=$query->fetch(PDO::fetch_OBJ)){
//计算到期日
$duration=$r->duration;
$ddays=$duration/24;
$date=$r->date;
$expires=date(“Y-m-d”,strotime($date.+”)“$ddays.”天);
//获取id(更新所需)
$id=$r->id;
//更新
$sql=“UPDATE`featured\u producer`
设置'expires`=?
其中'id`!=?';
$q=$db->prepare($sql);
$q->execute(数组($expires,$id));
echo$过期。“
”; }
在SQL中不等于不等于但是“更新
特色产品
设置
expires
=?其中
id
?”您可以同时使用这两个选项