【发布时间】:2019-03-19 15:34:15
【问题描述】:
PDO 准备好的更新语句以某种方式更新表中选定记录的日期时间列,即使查询中甚至没有特定的日期时间列。
if(isset($_POST['editCriteria']))
{
$value = $_POST['editCriteria'];
$editusername = $value['editusername'];
$hiddenUsername = $value['hiddenUsername'];
$editfullname = $value['editfullname'];
$editemail = $value['editemail'];
$edituserlevel = $value['edituserlevel'];
$editdivision = $value['editdivision'];
$editdept = $value['editdept'];
$editphone = $value['editphone'];
try
{
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$update = $dbc->prepare("UPDATE users_edi SET username = :uname,
fullname = :fname, userlevel = :ulevel, email = :uemail,
division = :udivision, dept = :udept, phone = :uphone WHERE username = :hname");
$update->execute([
'uname' => $editusername,
'fname' => $editfullname,
'ulevel' => $edituserlevel,
'uemail' => $editemail,
'udivision' => $editdivision,
'udept' => $editdept,
'uphone' => $editphone,
'hname' => $hiddenUsername
]);
if($update)
{
echo "Success: User has been updated.";
}
}
catch(PDOException $e)
{
echo "Error: " . $e->getMessage();
}
}
在数据库表中,有一个名为 lastLoginDate 的列正在更新为当前日期时间。
如果您在上面的更新语句中注意到,查询不包括 lastLoginDate。
如果 lastLoginDate 甚至不在查询中,它是如何更新的?
【问题讨论】:
-
可能有一个触发器导致更新发生。
-
@JayBlanchard - 谢谢你,先生。我找到了:
lastLoginDatedatetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,-我只需要删除那部分。 -
你必须设置
datetime_column TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;如果是这样,那么在更新的东西上删除。
标签: php pdo prepared-statement