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

如何去除PDO查询结果中的重复数据(数字与列名索引重复)

解决PDO查询返回重复数据的问题

嘿,这个问题我之前也碰到过!你看到重复数据是因为PDO默认的结果获取模式是PDO::FETCH_BOTH——它会同时生成带列名的关联数组和带数字索引的索引数组,所以同一条数据会以两种形式呈现。下面给你几种快速解决的方法:

方法1:全局设置默认获取模式

如果你希望所有PDO查询都默认返回单一格式的结果,可以在初始化PDO后设置全局属性,这样后续的fetch()、fetchAll()都会自动使用这个模式:

<?php 
$db = new PDO('mysql:dbname=test;host=localhost','root',''); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 设置默认返回关联数组(仅列名索引)
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

try { 
    $stmt = $db->query('SELECT * FROM Person'); 
    $ret = $stmt->fetchAll(); 
    print_r($ret); 
} catch (PDOException $e) { 
    echo 'Error: '.$e->getMessage(); 
} 
?>

方法2:在fetchAll()时指定获取模式

如果只是某一次查询需要单一格式的结果,可以直接在fetchAll()方法里传入模式参数,灵活度更高:

<?php 
$db = new PDO('mysql:dbname=test;host=localhost','root',''); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try { 
    $stmt = $db->query('SELECT * FROM Person'); 
    // 指定返回关联数组
    $ret = $stmt->fetchAll(PDO::FETCH_ASSOC); 
    print_r($ret); 
} catch (PDOException $e) { 
    echo 'Error: '.$e->getMessage(); 
} 
?>

可选的获取模式说明

除了PDO::FETCH_ASSOC,你还可以根据需求选择其他模式:

  • PDO::FETCH_NUM:仅返回数字索引的数组
  • PDO::FETCH_OBJ:返回匿名对象,列名作为对象属性
  • PDO::FETCH_BOTH:默认模式,同时返回两种索引的数组(就是你现在遇到的情况)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:22:27