查询更新更新列表中未提及的时间戳列
Posted
技术标签:
【中文标题】查询更新更新列表中未提及的时间戳列【英文标题】:query updating a timestamp column not mentioned in list of updates 【发布时间】:2017-05-30 13:13:33 【问题描述】:我只想更新数据库中的一列,但由于某种原因,我的 mysql 查询也更新了另一列。
我的代码看起来有点像这样:
$sql = "UPDATE rackusage set totalDuration =".$timeDiff." where (rackID = '".$rackID."' and startTime LIKE '%".$getStartTime."%');";
echo "<br>";
echo $sql;
echo "<br>";
$res = mysql_query($sql);
它在 php.ini 中。 我只想更新总 Duration 列,但由于某种原因,startTime 列也会更新。 输出字符串如下所示:
UPDATE rackusage set totalDuration =30 where (rackID = '2' and startTime
LIKE '%2017-05-30 18:34:36%');
这是生成的数据库:
【问题讨论】:
请使用准备好的语句,不要使用mysql
函数。使用 MYSQLi 或 PDO
为什么 where 子句有括号?
您的图片不支持您的问题。但除了 startTime 上的通配符(不必要)之外,查询看起来是正确的。
您是否设置了默认值startTime
,它会在每次执行时更新该列。
我猜你的意思是多行而不是多列。图片中的所有行都与您的 WHERE
子句匹配:它们都有 rackID = 2
并且它们都具有相同的时间。
【参考方案1】:
您的startTime
列似乎是这样定义的。
startTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
更改您的UPDATE
查询以包含SET startTime = startTime
,您将击败默认的ON UPDATE
部分。像这样的东西应该可以解决问题。
UPDATE rackusage set startTime = startTime, totalDuration =".$timeDiff." ...
【讨论】:
你的权利!非常感谢!这就是问题所在!该死。非常感谢:)【参考方案2】:如果 O.Jones 是正确的并且您不想更新列 statTime 的值,您可以在您的数据库上处理此语句:
ALTER TABLE rackusage
CHANGE `startTime` `startTime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
【讨论】:
酷 :) 谢谢 :)以上是关于查询更新更新列表中未提及的时间戳列的主要内容,如果未能解决你的问题,请参考以下文章