Php 来自PDO查询的SQL结果数组具有重复的值

Php 来自PDO查询的SQL结果数组具有重复的值,php,mysql,pdo,Php,Mysql,Pdo,我有一个mysql表,它有以下字段 STUDENTID | FIRSTNAME | SURNAME | DOB | SCHOOLID 表单用于用户搜索一个学生,并输出所有具有匹配的名字和姓氏的学生 下面的SQL语句返回PDO fine $sqlstmnt2='从学生中选择*,其中firstName=:fname和姓氏=:sname和schoolID=:schoolID'; //将PDO语句准备为$query。。。 // ... $query->execute(); $\会话[

我有一个mysql表,它有以下字段

STUDENTID  |  FIRSTNAME |  SURNAME  |  DOB   |  SCHOOLID
表单用于用户搜索一个学生,并输出所有具有匹配的名字和姓氏的学生

下面的SQL语句返回PDO fine


$sqlstmnt2='从学生中选择*,其中firstName=:fname和姓氏=:sname和schoolID=:schoolID';
//将PDO语句准备为$query。。。
// ...
$query->execute();
$\会话['FoundStudiors']=$query->fetchAll();
然而,当我将其传递到会话变量中的另一个PHP页面时,我对如何单独访问每个字段感到困惑。我有以下代码

foreach($\u会话['foundstudiors'][0]作为$found){
回声($发现);
}
这会输出找到的数据,但问题是它会输出两次,而且只是一个很长的数据字符串,无法很好地格式化。我的问题是:

为什么每个结果输出两次?
如何访问此数组中的各个字段(有点像FoundStudiors[0]['firstName']例如?

根据文档,方法和接受一个
$fetch_style
参数。如果未设置,默认值为
PDO::fetch_both
。这意味着获取的数组都将按位置(例如0、1、2)和列名(例如
“firstName”
“姓氏”
)引用字段

因此,默认情况下,获取的结果如下所示:

Array
(
    [0] => Array
        (
            [name] => apple
            [0] => apple
            [colour] => red
            [1] => red
        )

    [1] => Array
        (
            [name] => pear
            [0] => pear
            [colour] => green
            [1] => green
        )

    [2] => Array
        (
            [name] => watermelon
            [0] => watermelon
            [colour] => pink
            [1] => pink
        )

)
要解决此问题,您需要使用
PDO::fetch_COLUMN
作为fetch样式调用fetch函数(我想是这样的):

$query->execute();
$\会话['FoundStudiors']=$query->fetchAll(PDO::FETCH\列);

查询结果将返回并存储在结果对象中。因此,您必须使用xxxx\u fetch\u数组或xxxx\u fetch\u行对结果进行迭代。例如

$sql='SELECT * FROM table_name';
$result = mysqli_query($conn,$sql);
while($row=mysqli_fetch_array($result)){
    echo $row['COLUMN_NAME'].'<br />';
}
$sql='SELECT*FROM table_name';
$result=mysqli\u查询($conn,$sql);
while($row=mysqli\u fetch\u数组($result)){
echo$row['COLUMN_NAME'].
; }
您尚未包含相关的代码片段。您在何处以及如何设置
$\u会话
?根据您的获取模式,默认值将返回一个混合数组,其中包含数字键和索引键,这两个键都包含相应的列值。您能否向我们显示
var\u导出($\u会话['foundstuds'][0])