【问题标题】:How can I trigger PHP if a MySQL gets a new highest ID?如果 MySQL 获得新的最高 ID,我如何触发 PHP?
【发布时间】:2026-01-14 10:45:01
【问题描述】:

我试图让我的网页对我的 SQL 表中最高 ID (auto_increment) 增加的事件执行操作(在这种情况下播放声音),这在注册新用户时发生。例如。 : 3 个用户注册,最高 ID = 3。当新用户注册时,最高 ID = 4。如果发生这种情况,网页会回显/播放声音。 Js和PHP分别:

	<script type="text/javascript" src="jquery.js"></script>
 	<script type="text/javascript">
 		$(document).ready(function() {
 			setInterval(function () {
 				$('#show').load('data.php')
 			}, 3000);
 		});
 	</script>
<?php
include ('../includes/dbh.inc.php');
if ($conn->connect_error) {
	die("Connection error: " . $conn->connect_error);
}
$result = $conn->query("SELECT * FROM signs WHERE id = (SELECT MAX(id) FROM signs)");
if ($result->num_rows > 0) {
	while ($row = $result->fetch_assoc()) {
		echo $row['firstName'];
    echo $row['lastName'];
    echo $row['inOrOut'] . '<br>';
    $numId = $row['ID'] . '<br>';
    echo $numId;
	}
  $value = 1;
  $value = $numId;
  if ($value < $numId) {
    //echo '<script type="text/javascript">play_sound();</script>';
    echo "increased";
  }
  else 
    echo "nothing detected";
  }
}
?>

如您所知,我尝试比较最后一个和最新的 ID 值,但失败了。

我的尝试是存储 oldID 的初始值,然后在替换之前将其与 newID 进行比较。

【问题讨论】:

标签: javascript php mysql compare


【解决方案1】:

您不能仅使用 PHP 来做到这一点。但你可以这样做: 如果您有网站,则在 php.ini 的输出中设置当前最高 ID。您可以使用 javascript 每 5 分钟(或您认为有意义的任何其他时间跨度)调用另一个 php 脚本,以返回当前的最高数字。如果 php 脚本中的数字高于 javascript 中的数字,您可以让 javascript 为您播放声音。

假设你的 php 脚本返回一个像这样的 id:

{"id":4}

javascript 调用的示例如下:

<html>
<head></head>
<script>

let highestId = 2;

window.setInterval(async function(){
    const response = await fetch('http://localhost/jstest/index.php');
    const myJson = await response.json();
    console.log(console.log(myJson.id));
    if (highestId < myJson.id) {
        highestId = myJson.id
        // here you can play your sound
        $s = document.getElementById('myId');
        $s.innerHTML = highestId;
    }
}, 5000);

</script>
<body>
<span id="myId">0</span>
</body>
</html>

【讨论】:

  • 我更喜欢这个版本,而不是来自 Prifulnath,因为它不依赖于 cookie,也不需要使用额外的库,如 jquery。不错
  • 呵呵,谢谢,会尽快尝试!我不喜欢使用任何 cookie,因为我喜欢保持简单;)
  • 嘿,我在实现这个方法时遇到了问题。我不知何故无法将我从 sql 行中获取的 ID 的 PHP 值获取到 JS myJson.id 中。我在我的主页中使用您的示例并从 data.php(上面的 php 代码)中获取。我做错了什么?
【解决方案2】:

您可以使用 cookie 变量来执行此操作。使用 php 设置 cookie 值并通过 php 文件调用发送 cookie 值。这样您就可以识别出新的最高 id。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        setInterval(function () {
            var id = getCookie("highest_id");
            $('#show').load('data.php?id='+id)
        }, 3000);
    });
</script>

如果值发生变化,在代码中添加set cookie。

<?php
include ('../includes/dbh.inc.php');
if ($conn->connect_error) {
    die("Connection error: " . $conn->connect_error);
}
$result = $conn->query("SELECT * FROM signs WHERE id = (SELECT MAX(id) FROM signs)");
if ($result->num_rows > 0) {
    $numId = 0;
    if ($row = $result->fetch_assoc()) {
        $numId = $row['id'];
    }
    $value = $_GET['id'] ?? 0;
    if ($value < $numId) {
        //echo '<script type="text/javascript">play_sound();</script>';
        echo "increased";
        setcookie("highest_id", $numId, time() - 3600);
    } else {
        echo "nothing detected";
    }
}
?>

注意要点:

在 PHP 中:setcookie("highest_id", $numId, time() - 3600);

在脚本中:getCookie("highest_id");

【讨论】:

  • 感谢您的回答!我可能会试一试,尽管我更愿意在没有 cookie 的情况下解决问题。非常感谢您的努力!