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

PHP PDO中如何将查询结果的option_name作为键、option_value作为值生成数组

错误原因

你之前的写法生成的是二维索引数组:每次循环往$custom[]塞一个单独的键值对数组,最终返回的结构是:

Array
(
    [0] => Array
        (
            [header_index] => 12344
        )
    [1] => Array
        (
            [below_title] => 348478
        )
    [2] => Array
        (
            [below_content] => 77676
        )
)

自然无法直接通过$custom['header_index']取值,循环的时候每一个$row也只包含单个键值对,找不到header_index索引。

修复方案

方案1:修改循环逻辑(最直观)

直接把option_name作为返回数组的一级键赋值即可:

public function fetch_custom_options($type){
    $sql = "SELECT option_id, option_name,option_value,type,position FROM ts_options WHERE type=:type";
    $stmt = $this->dbConnection->prepare($sql);
    $stmt->bindParam(":type", $type, PDO::PARAM_STR);
    $stmt->execute();
    $rows = $stmt->fetchAll();
    $custom = []; 
    foreach($rows as $row){ 
        // 直接给对应键赋值,不要嵌套数组
        $custom[$row['option_name']] = $row['option_value'];
    }
    return $custom;
}

方案2:用PDO原生模式简化代码(更高效)

PDO的FETCH_KEY_PAIR模式可以直接将查询结果的第一列作为键、第二列作为值生成一维数组,不需要手动循环:

public function fetch_custom_options($type){
    // SQL里只需要查两个字段,顺序要注意:option_name在前,option_value在后
    $sql = "SELECT option_name, option_value FROM ts_options WHERE type=:type";
    $stmt = $this->dbConnection->prepare($sql);
    $stmt->bindParam(":type", $type, PDO::PARAM_STR);
    $stmt->execute();
    // 直接用FETCH_KEY_PAIR模式获取结果
    return $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
}

调用方式

修改后可以直接按你想要的方式取值,不需要额外循环:

$custom = $getFromPostClass->fetch_custom_options('ad');
// 直接取对应配置值
echo $custom['header_index']; // 输出12344
echo $custom['below_title']; // 输出348478

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:51:02