in_array()验证不起作用

时间:2014-11-15 00:11:25

标签: php mysql arrays

所以我正在尝试使用in_array从数据库中调用一个列表然后我正在检查这些结果,看看数组中是否存在“Title”字段,方法是执行以下操作。

$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一样工作检查所以我真的不确定为什么它不起作用。

1 个答案:

答案 0 :(得分:1)

您的查询返回多行,但您仅检索第一行的数据。因此,除非标题与第一行的标题匹配,否则您将找不到任何重复项。您需要执行以下操作之一:

1)在使用in_array()

之前,循环遍历结果集并制作一组页面标题
$GetAllTitlesRows = array();
while ($row = mysqli_fetch_array($rGetAllTitles, MYSQLI_ASSOC)) {
    $GetAllTitlesRows[] = $row['ArticleTitle'];
}

2)只需在查询中搜索使用该标题的任何文章,这样可以使代码更加简单(推荐)。换句话说,使用WHERE子句专门在ArticleTitle字段中查找该标题。如果你得到任何结果,你知道它被采取。

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