如何在php中存储来自mysql查询的未知数量的列

时间:2014-04-17 10:22:24

标签: php mysql sql

我有一个mysql表,我通过PHP查询它。查询如下所示

 SELECT min(Age) , max(Age) , min(Workexp) , max(Workexp) FROM data_table

根据用户的选择,它可能必须返回更多或更少的最小/最大对,但它总是只返回1行。

如果列数不变,我可以简单地使用下面的结果将结果存储在一个数组中并使用它。

$result=mysql_query($sql);

while ($obj = mysql_fetch_object($result)) 
    {$SelFieldNameArray[] = array('field_name1' => $obj->field_name1, 'field_name2' => $obj->field_name2);}

但是由于列数可变,我无法在此处执行此操作。有人可以帮我解决这个问题。谢谢。

4 个答案:

答案 0 :(得分:3)

您可以将结果作为关联获取并使用它。

while ($result = mysql_fetch_assoc($result)) {
    $SelFieldNameArray[] = $result;
}

答案 1 :(得分:3)

首先:请切换为使用mysqli_ *,因为mysql_ *已被弃用。

尝试此查询,定义最小和最大选择的属性名称

选择  min(年龄)AS minAge,  最大(年龄)AS maxAge,  min(Workexp)AS minWorkexp,  max(Workexp)AS maxWorkexp  FROM data_table

现在你的1行应该有4列开头,应该有以给定属性名称命名的4个属性。

因此,当作为关联数组(即使用mysqli_fetch_assoc)请求时,您可以直接访问它们:

$result = mysqli_fetch_assoc($query);
echo 'minAge = '.$result['minAge']
    .'maxAge = '.$result['maxAge']
    .'minWorkexp = '.$result['minWorkexp']
    .'maxWorkexp = '.$result['maxWorkexp'];

要将其作为对象提供给您,请使用mysqli_fetch_object

$result = mysqli_fetch_object($query);
echo 'minAge = '.$result->minAge
    .'maxAge = '.$result->maxAge
    .'minWorkexp = '.$result->minWorkexp
    .'maxWorkexp = '.$result->maxWorkexp;

答案 2 :(得分:1)

您的问题是您在查询中选择动态列数。

您可以通过以下方式检索它们:

$SelFieldNameArray = array();
//MYSQL_NUM retrieves all your rows in numbered indexes so you can
//easily loop through them
$row = mysql_fetch_array($sql,MYSQL_NUM); 
foreach($row as $k=>$v) {
    $SelFieldNameArray[] = array('field_name'.($k+1)=>$row[$k]);
}

输出:

array 
  0 => 
    array
      'field_name1' => 5
  1 => 
    array 
      'field_name2' => 10
  //...etc.

注意:

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 3 :(得分:1)

首先,如果它只返回一行,则不需要while。其次,您可以使用mysql_fetch_assoc来获取列名和值。例如:

$sql = "SELECT min(Age) , max(Age) , min(Workexp) , max(Workexp) FROM data_table";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

$columns = array_keys($row);
print_r($columns); //prints the column names
echo $columns[2]; //prints the name of the third column
echo count($columns); //prints total number of columns

print_r($row); //prints all columns and their values
echo $row[$columns[2]]; //prints what is in the third column

foreach ($row as $key=>$value) {
  echo $key.":".$value; //prints min(Age):1 for example
}

注意:不要使用 mysql _ 功能,因为它们已被弃用。