根据用户输入获取字段值

时间:2014-10-10 17:13:25

标签: php mysql

我正在尝试根据用户输入(用户名)获取字段值(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为资源,在第120行的C:\ xampp \ htdocs \ my中给出布尔值

4 个答案:

答案 0 :(得分:1)

该错误消息是由于您的查询出现错误并且无法执行而导致您没有错误检查以捕获该错误消息引起的。

由于username是一个字符串,因此需要在引号内,否则您的查询将会像当前一样继续失败。

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

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

即使在修复之后,您的查询也很容易被注入,它可能会让您的mysql服务器崩溃,然后才能眨眼。

How can I prevent SQL injection in PHP?

答案 1 :(得分:0)

删除这个

$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}'";

答案 2 :(得分:0)

如Hanky Panky所指出的那样,忽略了你容易SQL injection并且原来的Mysql API被弃用的事实,你的查询中有一个错误。在这一行:

$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注入和类似comic strip之类的事情发生。

答案 3 :(得分:-1)

这不是实现这一目标的最佳方式,但是 如果我坚持你的代码,他是纠正(删除第二个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'];
}