Php 如何使用变量列名进行SQL查询?

Php 如何使用变量列名进行SQL查询?,php,mysql,sql,Php,Mysql,Sql,我提出这样一个问题: $b1 = $_REQUEST['code'].'A'; //letter 'A' is concatenated to $_REQUEST['code'] $a = $_REQUEST['num']; echo $b1.$a; $sql = "SELECT '".$b1."' FROM student_record1 WHERE id=".$a; $result = mysql_query($sql); if(!$result) { echo '<p id=

我提出这样一个问题:

$b1 = $_REQUEST['code'].'A'; //letter 'A' is concatenated to $_REQUEST['code']
$a = $_REQUEST['num'];
echo $b1.$a;
$sql = "SELECT '".$b1."' FROM student_record1 WHERE id=".$a;
$result = mysql_query($sql);
if(!$result)
{
    echo '<p id="signup">Something went wrong.</p>';
}
else
{
    $str = $row[0]
    echo $str;
}
$b1=$\u请求['code'].'A'//字母“A”连接到$\u请求[“代码”]
$a=$_请求['num'];
echo$b1.$a;
$sql=“SELECT”“。$b1”“”来自学生记录1,其中id=“.$a;
$result=mysql\u查询($sql);
如果(!$result)
{
echo“

出现问题。

”; } 其他的 { $str=$row[0] echo$str; }

这里
$b1
$a
从另一个页面获取值。第三行中的“回声”给出了正确的结果。我在SQL中没有得到任何错误。相反,我不会从SQL查询中得到任何结果。我的意思是最后一行的echo。

不要这样做,它会破坏您的关系模型,不安全

与其让用户选择列
ID
columnA
columnB
columnC
columnD
columnE
,然后选择列的
a/B/C/D/E
,不如让用户选择一个列
ID
类型的表,
和have
类型
be
A/B/C/D/E
。这也使得以后添加
F/G/H/I
更加容易,而无需修改表格


其次,使用额外的列方法,您不必根据这样的输入值构建SQL。您可以使用准备好的语句,并且可以避免SQL注入。从未过滤的字符串生成SQL是错误的,而且非常危险。它会让你的网站遭到黑客攻击。

如果你必须使用动态表/列/数据库名称,你必须通过白名单运行它们

以下代码将执行以下操作:

$allowed_column = array('col1', 'col2'); 
$col = $_POST['col']; 
if (in_array($col, $allowed_column)) { 
    $query = "SELECT `$col` FROM table1 "; 
} 
见:


有关更多详细信息。

您是否尝试输出
$sql
包含的内容?此外,请参见上文。这是本网站上的一位难得的访客-一个明智的答案。一个更强大的解决方案+1给你先生或madamokk。。。谢谢你。。。事实上,我并不十分清楚这种sql注入。。。你能给我推荐一些好的来源来稳定他们吗?@yaswanthchilukuri:你应该从阅读什么是SQL注入开始,它已经足够好了。只有了解漏洞的表现方式后,才能开始保护自己免受其影响。使用现有的库,不要发明自己的库(它会失败)。由于您似乎正在使用PHP,所以您将使用or。我同意它对字段名没有帮助,但由于我认为字段名解决方案不是一个好的解决方案,所以我提出了一个替代方案。如果必须使用字段名,则白名单是最佳选择。