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
相关产品推荐
相关产品推荐

