2014-10-10 27 views
1

我試圖根據用戶輸入(用戶名)獲取字段值(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是資源,布爾在C中給出:\ XAMPP \ htdocs \我的在線120

回答

1

該錯誤消息是由於您的查詢出錯而無法執行並且您沒有錯誤檢查到位抓住這一點。

由於用戶名是一個字符串,它需要在引號內,否則你的查詢將繼續失敗,就像它目前一樣。

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

而且不要執行您的查詢兩次。雖然這不會導致你目前的錯誤,但這只是浪費資源和不必要的。

即使在修復之後,您的查詢很容易被注入,因此可能會在您眨眼之前將您的mysql服務器關閉。

How can I prevent SQL injection in PHP?

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

忽略的事實,你很容易SQL injection和原來的mysql的API已被棄用有在查詢一個錯誤的手帕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和準備好的語句,以避免SQL注入和這樣comic strip情況發生什麼。