【问题标题】:How to use mysql to find a field name of a record?如何使用mysql查找记录的字段名?
【发布时间】:2012-06-04 21:43:48
【问题描述】:

PDO sql 代码:

while($r = $q->fetch(PDO::FETCH_ASSOC)){
    $gg = join('</td><td>', $r);
    echo "<tr><td>" . $no_count . "</td><td>" . $gg . "</td></tr>";
    $no_count = $no_count + 1;      
}

变量$r是记录,如何回显$r的字段名?

假设$r 携带来自“产品”和“价格”两个不同字段的记录。 $r 的值为“apple”、“130”。如何将“usd”添加到“130”中?

我需要类似.... if $field_name == "$r['price']" { $r = join('usd', $r); };

感谢 Mike B,我快到了:

while($r = $q->fetch(PDO::FETCH_ASSOC)){
            foreach ($r as $name => $value) {
                if ($name == "price"){
                     $r = "usd" . $value; // this line got problem, how to change the value in an array variable $r?
                }
            }

            $gg = join('</td><td>', $r);
            echo "<tr><td>" . $no_count . "</td><td>" . $gg . "</td></tr>";
            $no_count = $no_count + 1;              
}

【问题讨论】:

  • 只是一点点改进,在连接到数据库后运行这段小代码以从fetch() 方法中删除PDO::FETCH_ASSOC$pdo-&gt;setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 它默认所有获取到 FETCH_ASSOC,使事情看起来更干净。
  • @zac1987,在您提供的代码中,我看不出$r 是130,因为$r 只分配了PDOStatement::fetch() 的返回值,它在传递@ 时返回一个关联数组987654334@。也许您向我们展示了错误的代码?您只使用一次$r 作为join() 的参数。 var_dump($r); 在循环的顶部,你会看到结构。
  • @Mike B,字段名称只有在用户选择时才可以是“价格”。但是当用户没有选择它时,字段名称将不再有“价格”。这是我的 sql 选择语句:$sql = "SELECT " . $setting_name_left_with_sign . " FROM sale";。如您所见,我不知道字段名称,因为字段名称在数组变量中。
  • @Mike B,是的,我不知道如何使用数组...我已经更新了我的问题。谢谢

标签: php mysql pdo


【解决方案1】:

array_keys($r) 会为您获取表中的字段列表,因为您正在获取关联数组。

你也可以循环遍历$r

foreach ($r as $name => $value) {
  print "$name: " . $value;
}

更新

//这行有问题,如何改变数组变量$r的值?

$r[$name] = 'usd' . $value;

对原始名称进行编辑。由于您在 foreach 循环中的 $name 变量中有密钥,因此您可以直接设置它。

【讨论】:

  • 我明白了。完美的!! $r[$name] 对我来说是新事物。向你学习新的东西。非常感谢。你是我的英雄>.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
相关资源
最近更新 更多