PHP实现单次SQL查询生成关联数组获取多结果求助
单次SQL查询获取关联数组解决方案
1. 编写单次查询的SQL语句
用IN子句一次性筛选出你需要的DEF_KEY值,直接获取所有目标数据:
SELECT DEF_KEY, DEF_VAL FROM JDEFAULTS WHERE DEF_KEY IN ('ip', 'ftpUserid', 'ftpPasswd');
2. PHP代码处理结果,构建关联数组
用$DB->getAll()(如果你的数据库类支持该方法,用于获取多行结果)替代多次getOne,遍历结果组装成关联数组:
// 执行单次查询,获取所有匹配行 $results = $DB->getAll("SELECT DEF_KEY, DEF_VAL FROM JDEFAULTS WHERE DEF_KEY IN ('ip', 'ftpUserid', 'ftpPasswd')"); // 初始化空数组 $config = []; // 遍历结果,将DEF_KEY作为键、DEF_VAL作为值存入数组 foreach ($results as $row) { $config[$row['DEF_KEY']] = $row['DEF_VAL']; } // 之后直接通过键名取值即可,比如 $config['ip']、$config['ftpUserid']
3. 兼容处理(可选)
如果担心部分DEF_KEY不存在导致取数报错,可以提前预设默认值:
// 先预设需要的键和默认值 $config = [ 'ip' => '', 'ftpUserid' => '', 'ftpPasswd' => '' ]; // 用查询结果覆盖预设值 foreach ($results as $row) { if (array_key_exists($row['DEF_KEY'], $config)) { $config[$row['DEF_KEY']] = $row['DEF_VAL']; } }
常见问题排查
- 若你的数据库类不支持
getAll(),改用query()配合循环取数:$stmt = $DB->query("SELECT DEF_KEY, DEF_VAL FROM JDEFAULTS WHERE DEF_KEY IN ('ip', 'ftpUserid', 'ftpPasswd')"); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $config[$row['DEF_KEY']] = $row['DEF_VAL']; } - 检查SQL中
DEF_KEY的大小写是否和表中实际存储一致(部分数据库区分大小写)
内容的提问来源于stack exchange,提问作者Hashibul Hussain
相关产品推荐
相关产品推荐

