我想用一个表示状态的数字更新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
?>
我试过这个剧本,但结果并不像我预期的那样。即使是$_day也超过一周。mySql未更新。我不知道为什么。知道吗?
尝试
UPDATE goods_db SET stts = '2'
WHERE DATEDIFF(CURDATE(),goods_date) >= 7
AND stts='1'
使用PDO或MYSQLI来避免SQL注入
使用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扩展的习惯。
这样做的另一件事是在服务器上创建一个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 ;
关于此链接的更多信息(如何在MySQL中创建计划事件)
您是要保存$_gid
还是$gid
?试试这个
$sql_updStts=sprintf("update goods_db set stts='2' where id='%s'",$_gid)