php - 来自 PDO 查询的 SQL 结果数组具有重复值
问题描述
我有一个具有以下字段的 mysql 表
STUDENTID | FIRSTNAME | SURNAME | DOB | SCHOOLID
表单用于用户搜索学生并输出所有匹配名字和姓氏的学生
以下 SQL 语句返回 PDO 罚款
$sqlstmnt2 = 'SELECT * FROM students WHERE firstName = :fname AND surname = :sname AND schoolID = :schoolID';
// prepare PDOstatement as $query ...
// ...
$query->execute();
$_SESSION['foundPupils'] = $query->fetchAll();
但是,当我将它传递到会话变量中的另一个 PHP 页面时,我对如何单独访问每个字段感到困惑。我有以下代码
foreach($_SESSION['foundPupils'][0] as $found){
echo($found);
}
这会输出找到的数据,但问题是它会输出两次,而且它只是一长串数据,无法很好地格式化。我的问题是:
为什么每个结果输出两次?如何访问此数组中的各个字段(例如,类似于 foundPupils[0]['firstName']?
解决方案
根据文档,方法PDOStatement::fetch和PDOStatement::fetchAll都接受一个$fetch_style
参数。如果未设置,则默认值为PDO::FETCH_BOTH
。这意味着获取的数组将按位置(例如 0、1、2)和列名(例如"firstName"
,"surname"
)引用字段。
因此,默认情况下,您获取的结果将是这样的:
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
)
)
要解决此问题,您需要使用fetch 样式调用 fetch 函数(我想它是PDOStatement::fetchAll) :PDO::FETCH_COLUMN
$query->execute();
$_SESSION['foundPupils'] = $query->fetchAll(PDO::FETCH_COLUMN);
推荐阅读
- python-3.x - 在 Tkinter 中裁剪图像的多个部分并放置在画布上
- javascript - ReactJS - 使用事件渲染外部 DOM 元素
- r - 在 R 中可视化大型面板数据
- python - 如何处理由于学生在神经网络中的能力分组而被标记为“0”的学校成绩?
- java - 如何在没有名为 AppData 的文件夹的 64 位 Windows 上安装 java 1.1?
- python - python中循环的输出是什么?
- node.js - 审核日志消息 Discord JS
- python - Selenium Chrome:加载配置文件并更改下载文件夹 - Python
- javascript - 带有 Axios 的 CORS:Cookie 到达客户端,但未保存以供将来请求
- vue.js - 如何使用 axios get call 调度响应 vuejs