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

PHP中如何使用SELECT IN查询数组列数据并统计符合条件行数

修正后的代码实现

核心问题分析

  1. 原$userID是二维数组,无法直接通过$userID['id']获取所有id值,需先提取一维id数组。
  2. 直接拼接SQL存在注入风险,且SELECT *统计行数效率低下。

方案1:基础修正(适用于id可控场景)

<?php
$connn = dbconnect(); 
// 从二维数组中提取所有id,得到一维数组[1,2,3]
$userIds = array_column($userID, 'id');
// 转义id防止SQL注入(数字类型可省略,但推荐保留)
$escapedIds = array_map(fn($id) => mysqli_real_escape_string($connn, $id), $userIds);
// 用COUNT(*)直接统计行数,比SELECT *更高效
$sql = "SELECT COUNT(*) AS lead_count FROM tblleads WHERE assigned IN (" . implode(',', $escapedIds) . ")";
$result = $connn->query($sql);
$row = $result->fetch_assoc();
$num_rows = $row['lead_count'];
?>

<h1>Lead Count : <?php echo $num_rows; ?>  </h1>

方案2:安全预处理(推荐,适用于所有场景)

预处理语句可彻底避免SQL注入,是更规范的写法:

<?php
$connn = dbconnect(); 
// 提取一维id数组
$userIds = array_column($userID, 'id');
// 生成与id数量匹配的占位符?
$placeholders = implode(',', array_fill(0, count($userIds), '?'));
// 构造带占位符的SQL
$sql = "SELECT COUNT(*) AS lead_count FROM tblleads WHERE assigned IN ($placeholders)";
// 初始化预处理语句
$stmt = $connn->prepare($sql);
// 绑定参数:i代表整数类型,重复对应id数量的i,用展开运算符传入所有id
$stmt->bind_param(str_repeat('i', count($userIds)), ...$userIds);
$stmt->execute();
// 获取统计结果
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$num_rows = $row['lead_count'];
?>

<h1>Lead Count : <?php echo $num_rows; ?>  </h1>

内容的提问来源于stack exchange,提问作者Hashan Madhusanka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 14:25:12