【问题标题】:PHP MySQL how to set column/field names into variables after fetch_assocPHP MySQL如何在fetch_assoc之后将列/字段名称设置为变量
【发布时间】:2018-10-19 08:09:52
【问题描述】:

我正在尝试获取列名和值,然后将列名设置为变量...有意义吗?

$con = mysqli_connect('localhost', 'mysql_user', 'mysql_password', 'db_name');
$sql = "SELECT * FROM `table`";
$res = mysqli_query($con,$sql);
while($row = $res->fetch_assoc()) {
    $column1 = $row['column1']; // <- can these be
    $column2 = $row['column2']; // as simple as one
    ...
    $column100 = $row['column100']; // line or two?
}
mysqli_close($con);

谁能指导我如何做到这一点?谢谢。

【问题讨论】:

  • “这有意义吗?” - 没有解释为什么你会想要那个 - 很少。 “编号”变量名称是您通常应该尽量避免使用的东西 - 这就是我们拥有数组的开始。
  • 原因是列数(很多表中有很多列),而且代码看起来很长很繁琐,要声明每个变量。
  • 不,我想知道为什么你(认为你)首先需要在“名称中带有数字的变量”中使用这个。您已经在 $row 中的一个不错的数组中拥有这些数据,那么究竟是什么阻止了您使用 that 来访问您的数据?
  • 实际的列名是,ID,product_code,product_name,product_date,product_category1_id,product_category2_id,...等等。我不知道如何修复这个数据库结构和代码。在至少我可以设法用 extract 缩短代码:) 谢谢
  • 这仍然不能解释为什么你认为有很多单独的变量浮动比直接访问数组中的值有任何优势。如果$row['foo']$row['bar'] 存在,您为什么要坚持单独提供$foo$bar?尤其是如果列数实际上达到数百个......

标签: php mysql variables mysqli columnname


【解决方案1】:

您可以使用字符串来声明一个变量,称为variable variables

while($row = $res->fetch_assoc()) {
    foreach ($row as $key => $value)
        $$key = $value;
//      ^----------------------notice the double dollar
}

或者,您可以使用extract

while($row = $res->fetch_assoc()) {
    extract($row);
}

为确保您不想覆盖一些已经存在的变量,您可以为它们添加前缀。

while($row = $res->fetch_assoc()) {
    foreach ($row as $key => $value)
        $someNicePrefix_{$key} = $value;
//                      ^----^-------------notice the curly brackets
}

使用提取,您可以添加更多参数(在上面链接的文档中描述)

while($row = $res->fetch_assoc()) {
    extract($row, EXTR_PREFIX_ALL, "someNicePrefix");
}

这两种方法的效果是一样的。请注意,对于提取,将在前缀和变量名之间插入一个字符 _

【讨论】:

  • 如果其中一个数据库列曾经与脚本中已经存在的变量的名称“冲突”,这可能会产生巨大的影响。想象一下其中一列被命名为rowres ...
  • 嗨 Cid,谢谢,这正是我想做的。嗨 misorude,是的。我现在遇到了多个 ID 的问题。我想知道我是否可以在变量变量之前添加表名。
  • 非常感谢,Cid :) 提取版本完美运行!
猜你喜欢
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 2013-02-07
  • 2023-04-07
  • 1970-01-01
  • 2011-08-30
相关资源
最近更新 更多