所以我正在尝试使用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一样工作检查所以我真的不确定为什么它不起作用。
答案 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";
}