2012-04-16 43 views
-1

我一直在讀通過,測試,以及從瞭解如何創建針對值的數組列匹配的MySQL的語句來了短...MySQL的WHERE陣列

這裏就是我有...

<form id="form" action="index.php" method="post"> 
<? 
$query = "SELECT Interest FROM Interests"; 
$result = mysql_query($query); 
while ($row = mysql_fetch_assoc($result)) 
{ 
    echo '<input type="checkbox" name="Interest[]" value="' . $row['Interest'] . '" /> ' . $row['Interest'] . '<br />'; 
} 
?> 
<input id="Search" name="Search" type="submit" value="Search" /> 
</form> 

<? 
if (isset($_POST['Search'])) 
{ 
    $InterestMatches = implode(',', $_POST['Interest']); 
    $query = "SELECT MemberID FROM MemberInterests WHERE Interest IN ($InterestMatches)"; 
    $result = mysql_query($query) or die(mysql_error()); 
    if (!$result) { 
     $message = 'Invalid query: ' . mysql_error() . "\n"; 
     $message .= 'Whole query: ' . $query; 
     die($message); 
    } 
    while ($row = mysql_fetch_assoc($result)) 
    { 
     $ResultingMemberIDs[] += $row['MemberID']; 
    } 
} 
?> 

而我總是得到的是同樣的錯誤......

Unknown column 'WhateverInterest' in 'where clause' 

有人可以告訴我什麼,我做錯了,我需要做的糾正呢?

+0

您能得到什麼,如果你打印'$ query'?另外一定要清除你輸入到查詢中的任何變量,惡意用戶可以注入sql。 – Jim 2012-04-16 16:41:06

+0

謝謝你,但這只是測試代碼,我生病的人死於那些想要告訴他們所有關於sql注入攻擊的帖子,並且在我的帖子中給我一個負數... – 2012-04-16 17:29:48

+0

我不是downvoter ,也不會拖延尋找sql注入漏洞的問題。我只是添加了這個,因爲我已經提出了一個問題。 – Jim 2012-04-17 11:56:18

回答

3

我建議迴應你的查詢,它會幫助調試。您的查詢目前看起來像:

SELECT MemberID FROM MemberInterests WHERE Interest IN (WhateverInterest,Testing) 

正如你所看到的,在IN的值是不帶引號的,所以他們解釋爲字段名。您需要在IN中的每個值周圍添加引號。

您可以通過循環和周圍的每個值加上引號修復:

foreach($_POST['Interest'] as &$intrest){ 
    $intrest = "'$intrest'"; 
} 
$InterestMatches = implode(',', $_POST['Interest']); 

或用"','"爆,然後前後分別增加報價:

$InterestMatches = "'" . implode("','", $_POST['Interest']) . "'"; 

附:您應該在$_POST['Interest']的每個值中使用mysql_real_escape_string以避免SQL注入。

+0

我用你的代碼,謝謝,它使它工作...現在唯一的問題是,查詢結果給我所有的結果有任何興趣...例如,如果我搜索2個不同的興趣,它會給我所有的結果,不管他們是否擁有所有的利益......你知道我的意思嗎? – 2012-04-16 17:01:19

+1

@MichaelConklin:這就是'IN'的工作原理。 'IN'與具有多個'OR'語句相同。 – 2012-04-16 17:18:14

+0

所以沒有辦法繞過它? – 2012-04-16 17:20:01

2

嘗試

$InterestMatches = '"' . implode('","', $_POST['Interest']) . '"'; 
+0

對不起,大聲笑,你的帖子太小了,我什至沒有看到它,但它看起來像就像我從其他工作響應者那裏使用的那個一樣...... – 2012-04-16 17:05:22