我想使用代表状态的数字更新mySql行。例如:
1 = New
2 = Old
默认情况下,将新数据添加到mySql时。状态自动设置为“1”。这就是重点。当天超过一周(7天)时,我想自动将其更新为“2”。这是代码:
<?php
$_toDay=date("Y-m-d");
.....
while($rec_gid=mysql_fetch_array($result_gid)){
$gid=$rec_gid['goods_id'];
$dateDB=$rec_gid['goods_date'];
$_diff = abs(strtotime($_toDay) - strtotime($dateDB));
$_years = floor($_diff / (365*60*60*24));
$_mon = floor(($_diff - $_years * 365*60*60*24) / (30*60*60*24));
$_days = floor(($_diff - $_years * 365*60*60*24 - $_mon*30*60*60*24)/ (60*60*24));
if($_days>7){//if older than a week then change status
$sql_updStts="update goods_db set stts='2' where id='$_gid'";
$result_updStts=mysql_db_query($dbname,$sql_updStts);
}//close while
?>
我已经尝试过这个脚本,但结果并不像我预期的那样。即使是$ _days也超过一周。 mySql没有更新。我不知道为什么。有什么想法吗?
答案 0 :(得分:1)
尝试
UPDATE goods_db SET stts = '2'
WHERE DATEDIFF(CURDATE(),goods_date) >= 7
AND stts='1'
答案 1 :(得分:1)
使用PDO扩展的示例:
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
?>
所以在你的情况下
<?php
$query = "UPDATE Goods_DB
SET stts = ?
WHERE DATEDIFF(CURDATE(),goods_date) > 6 AND stts = ?"
$valueA = 2;
$valueB = 1;
$stmt = $dbh->prepare($query);
$stmt->bindParam(1, $valueA);
$stmt->bindParam(2, $valueB);
$stmt->execute();
?>
养成使用PDO或MySQLi Extension的习惯。
执行此操作的另一个方法是在服务器上创建EVENT SCHEDULER
。在这种情况下,服务器将每天自动更新goods_db
。
DELIMITER $$
CREATE
EVENT `archive_blogs`
ON SCHEDULE EVERY 1 DAY
DO BEGIN
UPDATE Goods_DB
SET stts = 2
WHERE DATEDIFF(CURDATE(),goods_date) > 6 AND stts = 1;
END $$
DELIMITER ;
<强> More on this link (How to Create Scheduled Events in MySQL). 强>
答案 2 :(得分:0)
您是要保存$_gid
还是$gid
?
试试这个
$sql_updStts=sprintf("update goods_db set stts='2' where id='%s'",$_gid)