2014-11-15 69 views
0

所以我試圖用in_array從數據庫中調用一個列表,然後我檢查這些結果,看看字段「Title」是否存在於數組中以下。in_array()驗證不工作

$qGetAllTitles = "SELECT ArticleTitle FROM articles 
        UNION 
        SELECT ArticleTitle FROM temp_article"; 
$rGetAllTitles = mysqli_query($dbc, $qGetAllTitles); 
$GetAllTitlesRow = mysqli_fetch_array($rGetAllTitles, MYSQLI_ASSOC); 

if (in_array($Title, $GetAllTitlesRow['ArticleTitle'])){ 
     $errors[0] = "The title is already taken by another article, please pick a different title"; 
    } else { 
     $TTL = mysqli_escape_string($dbc, trim($Title)); 
     $errors[0] = "Title worked";  
    } 

我知道,字符串是大小寫敏感的(我正在尋找如何否定這個但這是另一個問題無關)

我的問題是,當我把已使用過的文章標題爲標題字段(工作,所有其他檢查我使用工作,只是不是這一個)它仍然返回「標題工作」,即使檢查不應該除非標題是唯一的。

我已經檢查在phpMyAdmin的SQL輸入(我的MySQL數據庫)和工作讓所有(3)結果,並獲取查詢的方法是從我的代碼,也可以工作在其他地方重複使用相同in_array檢查,所以我真的不知道爲什麼它不工作。

+0

debug $ Title?也許你正在傳遞一個布爾值,或者類似的東西?嘗試調試$標題和$ GetAllTitlesRow ['ArticleTitle']看看有什麼。 – 2014-11-15 00:16:31

+0

你確定'$ GetAllTitlesRow ['ArticleTitle']'是一個數組? – 2014-11-15 00:17:19

+0

mysqli_fetch_array返回一個* 1 *行的數組。它不返回包含查詢所有行的數組。 – brycem 2014-11-15 00:18:15

回答

1

您的查詢返回多行,但您只有檢索第一行的數據。所以除非標題與第一行的標題相匹配,否則不會找到任何重複。你需要做以下之一:

1)循環遍歷結果集,並使用in_array()

$GetAllTitlesRows = array(); 
while ($row = mysqli_fetch_array($rGetAllTitles, MYSQLI_ASSOC)) { 
    $GetAllTitlesRows[] = $row['ArticleTitle']; 
} 

2之前進行網頁標題的陣列)只要使用搜索任何物品該標題正好在您的查詢中,使代碼變得更簡單(推薦)。換句話說,在ArticleTitle字段中專門使用WHERE子句查找該標題。如果你得到任何結果,你知道它被採取。

$qGetAllTitles = "SELECT ArticleTitle FROM articles WHERE ArticleTitle = '$Title' 
        UNION 
        SELECT ArticleTitle FROM temp_article WHERE ArticleTitle = '$Title'"; 
$rGetAllTitles = mysqli_query($dbc, $qGetAllTitles); 

if (mysqli_num_rows($rGetAllTitles) > 0){ 
    $errors[0] = "The title is already taken by another article, please pick a different title"; 
} 
+0

我不能相信我錯過了我可以使用WHERE子句。多麼愚蠢。另外,爲什麼我只從fetch_array返回一行?當然,即使只有一列(ArticleTitle),仍然應該有與查詢中返回的值一樣多的數組行嗎? – Spratters53 2014-11-15 00:23:34

+0

mysqli_fetch_array()一次只返回一個結果。 – 2014-11-15 00:24:15

+0

哦,我看到了,如果我想要將每個結果都排除在數組之外,我應該使用它,但是您說的正確,在哪裏更容易。謝謝:) – Spratters53 2014-11-15 00:27:14