更新MySQL表导致没有指定的定义程序错误

时间:2017-01-20 16:31:56

标签: php mysql

我有一张包含基本员工信息的表格(即姓名,部门和职位)。虽然我在此表中添加或删除没有问题,但更新给我一个奇怪的错误。

在测试环境和我工作的实时环境中都会发生这种情况。错误是"指定为定义者的用户(' 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。没有理由添加其他用户。此外,这曾经很好地工作(根据同事的说法,我相对较新)因此,为什么突然需要改变定义器是不明智的。数据库也没有移动导致任何奇怪的错误。

1 个答案:

答案 0 :(得分:1)

发生错误是因为表中定义了BEFORE UPDATE和/或AFTER UPDATE触发器。触发器定义包括DEFINER;基本上,创建触发器的用户。

根据错误消息,我们知道触发器是使用DEFINER 'remote_admin'@'%'定义的。

执行UPDATE语句时,触发TRIGGER。并且抛出错误是因为触发器定义引用了不存在的用户。

根据错误消息,我们知道'remote_admin'@'%'表中未定义用户mysql.user

最可能的解释是该用户已被删除。

这就是错误的含义,以及执行UPDATE语句时发生的原因。