You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现:当IN查询的ID中有不存在项时终止程序运行?

多ID校验:存在缺失ID时程序未终止的修复方案

需求

当查询的多个ID里有任意一个不在数据库中,程序必须终止运行。

当前问题

数据库里有ID 244,但没有ID 255,执行现有代码后,程序因为查到了存在的244就继续运行,没按要求终止,不符合预期。

当前代码

$sql_result = mysql_query("SELECT `id` FROM `bokningar_bokat` WHERE `id` IN ('255','244')") or die(mysql_error());
$sql_row = mysql_fetch_assoc($sql_result);
if(!empty($sql_row['id'])) 
{
echo "Id exists - " .  $sql_row['id'] . "
 <BR/>";
} 
else
{
echo "Id no longer exists - " . $sql_row['id'] . "
 <BR/>";
die;
}

修复方法

原代码的核心问题是只取了查询结果的第一行,只要有一个ID存在就判定通过,完全没检查其他ID是否存在。要实现需求,得校验所有目标ID是否都在数据库里,具体修改如下:

// 先把要检查的ID放进数组
$target_ids = ['255', '244'];
// 转义ID防止SQL注入(注意:mysql_real_escape_string属于已废弃的mysql扩展,新项目建议用PDO/MySQLi)
$escaped_ids = array_map('mysql_real_escape_string', $target_ids);
$id_str = implode("','", $escaped_ids);

// 查询数据库中存在的目标ID
$sql_result = mysql_query("SELECT `id` FROM `bokningar_bokat` WHERE `id` IN ('$id_str')") or die(mysql_error());

// 把查到的ID收集起来
$found_ids = [];
while ($row = mysql_fetch_assoc($sql_result)) {
    $found_ids[] = $row['id'];
}

// 对比原始ID和查到的ID,找出缺失的
$missing_ids = array_diff($target_ids, $found_ids);
if (!empty($missing_ids)) {
    echo "不存在的ID:" . implode(', ', $missing_ids) . "<BR/>";
    die;
} else {
    echo "所有ID都存在<BR/>";
    // 这里写后续的业务逻辑
}

重点说明

  • 用array_diff可以快速找出原始ID数组里不在查询结果里的元素,精准定位缺失ID
  • 必须遍历所有查询结果收集存在的ID,不能只取第一行结果做判断
  • 额外提醒:mysql_*系列函数已经被PHP官方废弃,实际开发中建议换成PDO或者MySQLi扩展,安全性和兼容性更好

内容的提问来源于stack exchange,提问作者Wille Amin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:06:32