如何去除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
相关产品推荐
相关产品推荐

