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查询的列名的主要内容,如果未能解决你的问题,请参考以下文章