PHP:不使用foreach单独输出数组数据及会员数据函数问题
解决方法:访问单条会员数据时的数组层级问题
首先,咱们来搞清楚为什么会报错:你的memberData()函数返回的是二维数组——外层是一个包含单个元素的数组,这个元素才是存储会员具体信息的数组。所以直接写$memData['mem_id']肯定找不到索引,因为$memData的第一个元素索引是0,而不是mem_id。
下面给你两种靠谱的解决办法:
方法1:修改函数,直接返回单条关联数组(推荐)
因为你是根据mem_id查询的,这应该是表的主键,只会返回一条数据,完全没必要用while循环把结果塞进数组里。咱们直接返回单条数据,还能指定只返回关联键(避免默认的数字+关联双重复):
function memberData(){ global $pdo; $stmt = $pdo->prepare("SELECT * FROM members WHERE mem_id = :mem"); $stmt->bindValue(':mem', userId()); $stmt->execute(); // 使用PDO::FETCH_ASSOC只返回关联键数组,去掉冗余的数字索引 return $stmt->fetch(PDO::FETCH_ASSOC); }
修改完函数后,你就可以直接用echo $memData['mem_id'];来输出会员ID了,其他字段比如$memData['mem_name']也能直接访问,非常方便。
方法2:不修改函数,直接访问外层数组的第一个元素
如果暂时不想改动函数,你可以直接定位到外层数组的第一个元素(索引为0),再访问对应的字段:
// 直接访问二维数组的第一层索引0,再取具体字段 echo $memData[0]['mem_id']; echo $memData[0]['mem_name'];
不过这种方法只是临时 workaround,还是推荐方法1,因为逻辑上查询单个会员就应该返回单条数据,而非数组包裹的形式。
另外补充个小知识点:你之前print_r看到的数组既有关联键又有数字索引,是因为PDO默认的fetch模式是PDO::FETCH_BOTH,会同时返回两种格式的结果。用PDO::FETCH_ASSOC就能只保留关联键,让数组更简洁。
内容的提问来源于stack exchange,提问作者RedStar Entertainment
相关产品推荐
相关产品推荐

