在获取期间将值 PHP 变量分配为列名

Assign value PHP variable as column name during fetching

我正在尝试使用 PHP 从 MySQL table 中的列中获取值。变量 $batch_id 是动态的,即它根据请求更改列名。比如说,它可以采用 'Batch1' 或 'Batch10' 这样的值。我能够将列名提取到 $batch_id 变量中,但是当我传递列名时,说 'Batch10' 数组 $batch_Value 填充了 'Batch10' 而不是该列的值。我确信必须有一个简单的解决方案,但我被卡住了。任何帮助将不胜感激。我正在使用以下代码。

$batch_Value = array();
if($num>0){
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        extract($row);
        $batch_Value[] = $batch_id;
    }
}

左边是我得到的,右边是预期的结果。但是当我直接使用列名时我得到的是右手

获取数据作为数字索引数组而不是关联数组。另外,不要使用 extract,它不安全,因为它会覆盖现有变量。

$batch_Value = array();
if($num>0){
    while ($row = $stmt->fetch(PDO::FETCH_NUM)){
      $batch_Value[] = $row[0];
    }
}

或者如果所需的列不是第一个,则可以在 $row 数组中找到值(这是一个关联数组,有关详细信息,请参阅 print_r($row);),使用以下:

$batch_Value = array();
if($num>0){
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
      $batch_Value[] = $row[$batch_id];
    }
}

切勿在您的代码中使用 extract。这会导致很多问题。

PDO 有很多有用的获取模式。我看不出有任何理由使用 while 循环。

您可以像这样从单个列中获取值:

$batch_Value = $stmt->fetchAll(PDO::FETCH_COLUMN);

这将为您提供一个一维数组,其中包含第一列中的值列表。

如果你想获取整行,按第一列索引,那么你可以使用PDO::FETCH_UNIQUE:

$batch_Value = $stmt->fetchAll(PDO::FETCH_UNIQUE);

有关所有获取模式的说明,请参阅 https://phpdelusions.net/pdo/fetch_modes