php - 功能/触发器已在使用?

标签 php html mysql mysqli

我在更新功能运行时遇到问题。该函数将徽章标记为可见,以便它们在通知窗口中隐藏。

当用户单击按钮将其标记为可见时,将调用该函数。

我的表上有两个触发器正在尝试更新,我认为这可能会导致问题。

问题是:无法更新存储函数/触发器中的表“用户”,因为它已被调用此存储函数/触发器的语句使用。

触发器:

enter image description here

功能:

function markAsSeen() {
        require "connect.php"; 

    $seen = mysqli_query($connection,"Update userbadges 
INNER JOIN users ON users.id = userbadges.user_id
SET seen='1'
WHERE studentid = '".$_SESSION["studentid"]."' && seen=0")  or die(mysqli_error($connection));

  while ($data = mysqli_fetch_array($seen)) {

echo 'Done';


  }
}

有什么办法可以解决这个问题吗?

最佳答案

您的问题是 update_users_trigger触发器对表 users 的内容进行更改,而触发此触发器执行的查询也使用表 users .

您需要调整查询,以免发生这种死锁。目前尚不清楚每个表中的哪些字段,但我怀疑在您的初始查询中您需要加入 users这样您就可以在 studentid 上查询.

您可以创建一个不同的函数来获取您需要的用户ID,如下所示:

require_once "connect.php";
function getUserIDFromStudentID($student_id, mysqli $connection)
{
    $query = 'SELECT id FROM users WHERE studentid = ? LIMIT 1';
    $stmt = $connection->prepare($query);
    // Replace the below s to an i if it's supposed to be an integer
    $stmt->bind_param("s", $student_id);
    $stmt->execute();
    $result = $stmt->get_result();
    $record = $result->fetch_object();
    $result->free();
    if ($record) {
        return $record->id;
    }
}

function markAsSeen(mysqli $connection) {
    $user_id = getUserIDFromStudentID($_SESSION["studentid"], $connection);
    if (! $user_id) {
        throw new Exception('Unable to get user id');
    }
    $seen_query = 'UPDATE userbadges SET seen = 1 WHERE user_id = ? and seen = 0';
    $stmt = $connection->prepare($seen_query);
    // Replace the below s to an i if it's supposed to be an integer
    $stmt->bind_param("s", $user_id);
    $result = $stmt->execute();
    if (! $result) {
        die(mysqli_error($connection));
    }
    echo 'Done';
}

传递连接对象而不是每次都需要全局文件将提供更大的灵 active 。

关于php - 功能/触发器已在使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31000497/

相关文章:

sql - 组合 SQL 插入和删除

mysql - 如何使用 SQL 根据模式更新列内的特定数据?

javascript - 将变量从 PHP 转换为 Javascript 以用于 Google Analytics 电子商务跟踪代码

php - 为访问者开发后清除缓存

php - 从表中选择第三个最大值

javascript - 仪表板网格 - Chart.JS 和 CSS - 问题扩大两个小水平条形图 - 菜鸟问题

css - 在另一个 Div 中以表格方式 float 的 Div

php - 选择具有第一个条件的第三个表[SQL]

php - 仅 PHP 文件的 PHP 结束标记有哪些参数?

javascript - 网站中的 3 张图像