说到 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/