微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL 通过私钥/外键更新两列

如何解决MySQL 通过私钥/外键更新两列

我有一个表来记录用户的活动,还有另一个表供用户跟踪他们的当前状态。 表 AccessLog 有两个来自用户的字段;有时我会收到 UserID,有时会收到 UserEmail。

有没有办法只填写一个字段(即 UserEmail)而其他字段(UserID)会以某种方式自动更新,或者在更新时有一些触发器?

  • 或者可能使用两个外键,因为我看到一个表上的 2 个引用是不可能的。

AccessLog 表如下所示:

CREATE TABLE AccessLog(
     ID int(11) AUTO_INCREMENT,IP varchar(45) NOT NULL DEFAULT '',UsEml varchar(60) NOT NULL DEFAULT '',VidID int(5) NOT NULL,URI varchar(255) NOT NULL DEFAULT '',LogDate timestamp NOT NULL DEFAULT Now(),browser varchar(200) NOT NULL DEFAULT '',SesID varchar(255) NOT NULL DEFAULT '',UsID int(11),PRIMARY KEY  (ID),CONSTRAINT LogUser
     FOREIGN KEY (UsID) 
        REFERENCES Users(UsID)
            ON UPDATE CASCADE
            ON DELETE SET NULL
)ENGINE=INNODB;

用户表:

CREATE TABLE Users(
     UsID int(11) AUTO_INCREMENT,UsName varchar(60) NOT NULL DEFAULT '',Active boolean NOT NULL DEFAULT '0',LastIP varchar(45) NOT NULL DEFAULT '',CurStat varchar(30) NOT NULL DEFAULT '',LastSesID varchar(255) NOT NULL DEFAULT '',LastCh timestamp NOT NULL DEFAULT Now(),PRIMARY KEY  (UsID),) ENGINE=INNODB;

现在我在 PHP 中使用函数返回其他字段,但似乎对我不起作用

从 UserEmail 中查找 UserID 的函数

function find_user_ID($rUSR =array()) 
{
// Check database connection
  if( ($DB instanceof MysqLi) == false) {
    return array(status => false,message => 'MysqL connection is invalid');
  }
  $query = "SELECT UsID FROM Users WHERE UsEml=? LIMIT 1";
  $qsql = $DB->prepare($query);
  $qsql->bind_param("s",$rUSR);
  $qsql->execute();
  $qsql->bind_result($result);
  $qsql->fetch();
  return $result;
  //$result = $qsql->get_result();

  if($qsql) {
    return array(status => true);
  }
  else {
    return array(status => false,message => 'Not Found');
  }
}

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。