根据用户输入获取字段值


To fetch a field value on basis of user input

我正在尝试根据用户输入(用户名)获取字段值(SecurityQues)。

以下是代码:

$substr=substr($usrnm,0,2);
if($substr=="AC")
{
    $res="SELECT SecurityQues FROM reg_ac WHERE UserName=$usrnm";
}
else
{
    $res="SELECT SecurityQues FROM reg_indi WHERE UserName=$usrnm";
}       
$result = mysql_query($res,$db_handle); 
$result = mysql_query($res);
while($row = mysql_fetch_assoc($result))
{   
    echo $row['SecurityQues'];
}

但我收到以下警告:

警告:mysql_fetch_assoc()要求参数1为resource,在第120行的C:''examplep''htdocs''my中给定布尔值

该错误消息是由于您的查询出现错误而无法执行,并且您没有进行错误检查来捕获该错误消息。

由于username是一个字符串,它需要位于引号内,否则您的查询将像当前一样不断失败。

$res="SELECT SecurityQues FROM reg_ac WHERE UserName='$usrnm'";
                                                     ^      ^

并且不要执行查询两次。虽然这并没有导致您当前的错误,但这只是浪费资源和不必要的。

即使在修复之后,您的查询也很容易被注入,可能会在眨眼之前关闭您的mysql服务器。

如何防止PHP中的SQL注入?

删除这个

$result = mysql_query($res);

改变这个

if($substr=="AC")
{
    $res="SELECT SecurityQues FROM reg_ac WHERE UserName=$usrnm";
}
else
{
    $res="SELECT SecurityQues FROM reg_indi WHERE UserName=$usrnm";
}  

到这个

if ( $substr == "AC") $res = "SELECT SecurityQues FROM reg_ac WHERE UserName = '{$usrnm}'";
else $res = "SELECT SecurityQues FROM reg_indi WHERE UserName = '{$usrnm}'";

忽略您容易进行SQL注入以及不赞成使用原始Mysql API的事实,您的查询中存在Hanky Panky指出的错误。在线路上:

$result = mysql_query($res,$db_handle);  

变量$result的结果被初始化为布尔值false,该值不是mysql_fetch_assoc的有效参数。

你可以通过以下方式获得更多关于正在发生的事情的信息:

$result = mysql_query($res,$db_handle) or die ("Error in query: $query. ".mysql_error());

您真的应该考虑使用Mysqli和prepared语句来避免SQL注入和类似漫画的事情发生。

这不是实现这一目标的最佳方式,但如果我坚持你的代码,他就是纠正(删除第二个mysql_query,容易出错):

$substr=substr($usrnm,0,2);
if($substr=="AC")
{
    $res="SELECT SecurityQues FROM reg_ac WHERE UserName='$usrnm'";
}
else
{
    $res="SELECT SecurityQues FROM reg_indi WHERE UserName='$usrnm'";
}
$result = mysql_query($res,$db_handle); 
while($row = mysql_fetch_assoc($result))
{   
    echo $row['SecurityQues'];
}