php中sql查询的列名

Posted

技术标签:

【中文标题】php中sql查询的列名【英文标题】:Column name from sql query in php 【发布时间】:2019-05-15 17:56:27 【问题描述】:

我正在尝试从 SQL 数据库中提取列名以在 html 的下拉列表中使用。然后我尝试将 php 插入 HTML 下拉列表以显示列名。

我使用 fetch 数组从 SQL 中获取输出,使用另一个下拉列表中的变量来拉取相关的 SQL 表。但是我不能在 PHP 中返回列名。我得到的只是使用$row[2].的值

有没有一种简单的方法来拉取列名(即数值后方括号中的非数值)。

$query="SELECT * FROM ".($units_cat)."";

    if ($result = mysqli_query($link, $query)) 
        $row = mysqli_fetch_array($result);

        echo nl2br (" \n Query was successful \n");
        print_r($row);
        echo "<br>";
     

HTML

<option value="<?php $row[2]?>"
        <?php 
        if($_POST['units_from']==$row) 
            echo 'selected="selected"';?>
        >
<?php echo ($row[2])?>
</option>

SQL 查询的输出

Array ( 
   [0] => 1 
        [id] => 1 
   [1] => Klbs 
        [from_value] => Klbs 
   [2] => 1.0000000000 
        [klbs] => 1.0000000000 
  [3] => 1000.0000000000 
        [pound] => 1000.0000000000 
  [4] => 0.4535923700 
        [ton] => 0.4535923700 
  [5] => 453.5923700000 
        [kg] => 453.5923700000 
  [6] => 224.8089424432 
        [newton] => 224.8089424432 
  [7] => 22.4808942443 
         [dn] => 22.4808942443 
  [8] => 0.2248089424 
         [kn] => 0.2248089424 
    )

【问题讨论】:

尝试mysqli_fetch_assoc 或将MYSQLI_ASSOC 添加到您的fetch_array(请参阅文档),您将能够仅获得列-> 值。现在,就获取所有列名而言,您可以使用 foreach 来获取键/值。 您很容易受到该代码的 SQL 注入攻击,无论何时将值插入查询总是使用准备好的语句,无论插入查询的数据源是什么 【参考方案1】:

我可以通过使用 DESCRIBE 输出表数据数组来做到这一点。然后创建一个列数组。

 $query2=("DESCRIBE ".mysqli_real_escape_string($link, $units_cat));

if ($result2 = mysqli_query($link, $query2)) 
    $table_desc = mysqli_fetch_all($result2);


#Create an array of column values   
    foreach($table_desc as $val)   
        $col[]=$val[0]; 
    

然后调用相关下拉列表中的列值。

 <option value="<?php echo($col[2]) ?>"<?php if($_POST['units_from']==($col[2])) echo 
 'selected="selected"';?>><?php echo($col[2]) ?></option>  

我不得不将 $units_cat 引用的表列入白名单,因为我认为您无法准备表,因为您无法将参数绑定到 PHP/SQL 中的表条目。

#Get tables list for whitelisting
$query3="Show tables";
$result3=mysqli_query($link,$query3);

if (!$result3) 
    echo "DB Error, could not list tables\n";
    echo 'MySQL Error: ' . mysqli_error();
    exit;


if ($result3=mysqli_query($link,$query3))
    while($row=mysqli_fetch_row($result3))

        $tables[]=$row[0];

    
       


#UNITS CAT WHITELIST CHECK  
if (in_array($units_cat,$tables))

    echo nl2br (" \n Units Cat Table exists");

else

    echo "Table does not exist";
    mysqli_close($link);
    echo "<br>";
    die("non valid entry");

【讨论】:

【参考方案2】:

使用 mysql_fetch_array 你可以单独访问每个参数 $行['id']; $row['磅'];

但是,考虑到您可以通过使用公制单位的简单转换来节省空间,在数据库中存储同一变量的不同值(以 kg、ton、in... 为单位)似乎有点不必要。您的用户每次都需要输入不同单位的重量吗?

【讨论】:

是的,他们会放入不同的单位,因为它是一个单位转换器。我希望能够使用数组中的序列而不是参数名称来调用参数名称。这是因为参数将根据另一个下拉菜单中的选择而改变。 (即,当我选择下一个下拉菜单时,显示的数组用于 MASS - FLOW 参数值将更改为 GPM 等流量值) 请不要使用答案来提出澄清问题。

以上是关于php中sql查询的列名的主要内容,如果未能解决你的问题,请参考以下文章

如何动态准备 SQL 查询(也包括列名)避免 SQL 注入

如何通过SQL从IBM db2中的查询中获取列名

查询中的 SQL 无效列名检测

sql2008提示“列名无效”,但是能正常查询

在 SQL 查询中使用 Python 列表获取列名

select 连接查询语句 SQL语句查询