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

PHP连接MSSQL时出现Undefined array key 'user_id'报错求助

问题解决:PHP PDO fetchAll访问数组键报错

问题描述

在Laragon环境下使用PHP连接Microsoft SQL Server 2019时,运行details.php出现警告:Warning: Undefined array key "user_id" in C:\laragon\www\auth\public\details.php on line 23。通过PDO的fetchAll(PDO::FETCH_ASSOC)获取到包含user_id和email的二维数组(var_dump结果显示数组结构正常),但尝试访问$row['user_id'](含各种引号方式)均报错。

相关代码

<?php
$pdo = require __DIR__ . '/../src/bootstrap.php'; 

$user_id=$_GET['user_id'];
if(!is_numeric($user_id))
{
    echo "Data Error";
    exit;
}

$sql = 'SELECT user_id,email from users
        WHERE user_id = :user_id';

$statement = db()->prepare($sql);
$statement->bindParam(':user_id', $user_id, PDO::PARAM_STR); 
$statement->execute();

$row= $statement->fetchAll(PDO::FETCH_ASSOC);

var_dump($row);
// die();

echo " ID: $row[user_id],";

运行输出

array(1) { [0]=> array(2) { ["user_id"]=> string(2) "27" ["email"]=> string(15) "billy@gmail.com" } }
Warning: Undefined array key "user_id" in C:\laragon\www\auth\public\details.php on line 23
ID: ,

问题原因

fetchAll(PDO::FETCH_ASSOC)返回的是二维数组,即使只有一条数据,它也会把这条数据放在索引为0的子数组里。直接访问$row['user_id'],相当于在顶层数组里找user_id键,而顶层数组的键是0,自然找不到,因此触发报错。

解决方案

有两种处理方式:

方式一:改用fetch(PDO::FETCH_ASSOC)获取单条数据

因为SQL是根据user_id查询,结果只会有一条数据,用fetch直接获取一维数组更高效:

// 替换fetchAll为fetch
$row= $statement->fetch(PDO::FETCH_ASSOC);

// 直接访问数组键
echo " ID: {$row['user_id']}, Email: {$row['email']}";

方式二:保留fetchAll,访问子数组的键

如果坚持使用fetchAll,需要先取索引0的子数组再访问键,同时建议增加空结果判断:

$rows= $statement->fetchAll(PDO::FETCH_ASSOC);

// 判断是否存在数据
if (!empty($rows)) {
    $row = $rows[0];
    echo " ID: {$row['user_id']}, Email: {$row['email']}";
} else {
    echo "未找到对应用户";
}

注意事项

  • 访问数组键时,建议用单引号包裹(如$row['user_id']),字符串插值时最好用大括号包裹(如{$row['user_id']}),避免PHP解析歧义
  • 必须处理查询结果为空的情况,防止出现Undefined array key 0的新警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:40:11