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

如何使用PHP/Mysqli对比同一张表中两行的所有列?

嘿,我来帮你搞定这个对比表中两行所有列的问题!用PHP和mysqli实现其实很直观,咱们一步步来:

实现步骤与代码示例

首先,假设你的表名叫user_comparisons(记得替换成你实际的表名),我们以对比Adam和Billy的所有列为例:

1. 建立数据库连接

首先用mysqli创建安全的数据库连接:

// 替换成你的数据库信息
$host = 'localhost';
$db_name = 'your_database_name';
$db_user = 'your_db_username';
$db_pass = 'your_db_password';

// 创建mysqli连接(面向对象方式)
$conn = new mysqli($host, $db_user, $db_pass, $db_name);

// 检查连接是否成功
if ($conn->connect_error) {
    die("数据库连接失败: " . $conn->connect_error);
}

2. 获取要对比的两行数据

用预处理语句查询指定的两行,避免SQL注入:

// 定义要对比的两个用户名
$user_a = 'Adam';
$user_b = 'Billy';

// 预处理查询,获取两行的所有列
$sql = "SELECT * FROM user_comparisons WHERE username IN (?, ?)";
$stmt = $conn->prepare($sql);
// 绑定参数(两个字符串类型,所以用"ss")
$stmt->bind_param("ss", $user_a, $user_b);
$stmt->execute();

// 获取结果集并转换成关联数组
$result = $stmt->get_result();
$user_rows = [];
while ($row = $result->fetch_assoc()) {
    // 用username作为数组键,方便后续取值
    $user_rows[$row['username']] = $row;
}

// 关闭语句和连接
$stmt->close();
$conn->close();

3. 对比列值并找出差异

遍历所有列,对比两个用户的对应值,记录差异:

// 先检查是否成功获取到两行数据
if (count($user_rows) !== 2) {
    echo "无法找到指定的两个用户数据,请检查用户名是否正确!";
    exit;
}

// 取出两行数据
$row_a = $user_rows[$user_a];
$row_b = $user_rows[$user_b];

// 存储差异的数组
$differences = [];

// 遍历第一行的所有列
foreach ($row_a as $column_name => $value_a) {
    // 跳过username列(因为这是用来区分用户的,不需要对比)
    if ($column_name === 'username') {
        continue;
    }

    $value_b = $row_b[$column_name];
    // 严格对比值(包括类型,比如0和"0"会被视为不同)
    if ($value_a !== $value_b) {
        $differences[] = [
            'column' => $column_name,
            $user_a => $value_a,
            $user_b => $value_b
        ];
    }
}

// 输出对比结果
if (empty($differences)) {
    echo "<p>{$user_a} 和 {$user_b} 的所有列值完全相同!</p>";
} else {
    echo "<p>{$user_a} 和 {$user_b} 的差异列如下:</p>";
    echo "<ul>";
    foreach ($differences as $diff) {
        echo "<li><strong>列名:{$diff['column']}</strong> | {$user_a}:{$diff[$user_a]} | {$user_b}:{$diff[$user_b]}</li>";
    }
    echo "</ul>";
}
一些注意事项
  • 替换占位信息:记得把代码中的数据库信息、表名换成你实际的内容;
  • NULL值处理:如果你的列可能有NULL值,!==会严格区分NULL和其他值(比如NULL和0会被视为不同),如果需要把NULL和空字符串视为相同,可以把判断条件改成$value_a != $value_b;
  • 安全性:始终用预处理语句绑定参数,不要直接把变量拼到SQL语句里,防止SQL注入;
  • 扩展性:不管你的表有多少个compareX列,这个代码都能自动遍历所有列,不用手动修改列名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:39:30