我有一张包含基本员工信息的表格(即姓名,部门和职位)。虽然我在此表中添加或删除没有问题,但更新给我一个奇怪的错误。
在测试环境和我工作的实时环境中都会发生这种情况。错误是"指定为定义者的用户(' remote_admin' @'%')不存在"。我不确定这个错误意味着什么,或者为什么这只发生在表更新上。
我只是使用SQL来更新表:
Update office_employee
Set Title='Title Here'
Where id=117;
我在测试环境中使用的代码是:
<?
$db = new DbConnect(Config::dbhost, Config::dbuser, Config::dbpassword, "intranet", Config::error_reporting, Config::persistent);
if($db->open()) {
echo '<p>Successfully Connected</p>';
$sql = "Select * FROM office_employees";
$sql2 = "Update office_employees Set Title='Title Here' where id=117";
echo $sql2;
echo '<br />';
echo $sql;
$db->query($sql2) or die($db->error());
$results = mysql_query($sql);
echo '<br />';
echo $results;
while($row = mysql_fetch_array($results)) {
echo '<br />';
print_r($row);
echo '<br />';
}//*/
$db->close();
} else {
echo '<p>Unsuccessful in Connecting</p>';
}
?>
修改
数据库只有一个用户,即admin。没有理由添加其他用户。此外,这曾经很好地工作(根据同事的说法,我相对较新)因此,为什么突然需要改变定义器是不明智的。数据库也没有移动导致任何奇怪的错误。
答案 0 :(得分:1)
发生错误是因为表中定义了BEFORE UPDATE
和/或AFTER UPDATE
触发器。触发器定义包括DEFINER
;基本上,创建触发器的用户。
根据错误消息,我们知道触发器是使用DEFINER 'remote_admin'@'%'
定义的。
执行UPDATE语句时,触发TRIGGER。并且抛出错误是因为触发器定义引用了不存在的用户。
根据错误消息,我们知道'remote_admin'@'%'
表中未定义用户mysql.user
。
最可能的解释是该用户已被删除。
这就是错误的含义,以及执行UPDATE语句时发生的原因。