PHP MYSQL检查重复条目

PHP MYSQL检查重复条目,php,mysql,database,duplicates,Php,Mysql,Database,Duplicates,(这是我的第一篇帖子) 我编写了一个PHP脚本,将“数据集”输入MySQL数据库。 在输入数据之前,我想检查“数据集”是否已经在数据库中 我的问题:它只适用于少数数据集(是的,我确信我没有忘记大写和小写) 下面是脚本(您不需要德语注释…): 播放列表 setTimeout(“self.location.href='index.php',6000); 这意味着只有且仅当一条记录存在但必须有多条记录时。将==1替换为=0 下面是一个检查变量是否为空的建议,而不是使用$var=''使用空($var)

(这是我的第一篇帖子) 我编写了一个PHP脚本,将“数据集”输入MySQL数据库。 在输入数据之前,我想检查“数据集”是否已经在数据库中

我的问题:它只适用于少数数据集(是的,我确信我没有忘记大写和小写) 下面是脚本(您不需要德语注释…):


播放列表
setTimeout(“self.location.href='index.php',6000);
这意味着只有且仅当一条记录存在但必须有多条记录时。将
==1
替换为
=0

下面是一个检查变量是否为空的建议,而不是使用
$var=''
使用
空($var)

这意味着只有且仅当一条记录存在但必须有多条记录时。将
==1
替换为
=0


这里有一个检查变量是否为空的建议,而不是使用
$var=''
使用
空($var)
或者,重新构造表并使用。

或者,重新构造表并使用。

在这一行:

if (mysql_num_rows($inp_einlesen) == 1 and mysql_num_rows($titel_einlesen) == 1)
你只是在测试一个结果。也许你有多个结果?也许两个记录有“inp_einlesen”匹配,而“titel_einlesen”只有一个匹配?换句话说,如果您的数据集已经有重复项,那么此行将找不到它们,除非每个字段只有一个重复项

除了大写/小写之外,还有一个是尾随空格。确保使用trim()删除尾随空格

另一件你可能想标准化的事情是你如何处理逃逸。如果有人输入的数据中有撇号,您需要手动转义,或者在较低的级别处理它,如使用magic_引号

此外,这里的代码很容易受到MySQL注入攻击。请务必阅读“mysql\u real\u escape\u string”的PHP手册页。

在这一行:

if (mysql_num_rows($inp_einlesen) == 1 and mysql_num_rows($titel_einlesen) == 1)
你只是在测试一个结果。也许你有多个结果?也许两个记录有“inp_einlesen”匹配,而“titel_einlesen”只有一个匹配?换句话说,如果您的数据集已经有重复项,那么此行将找不到它们,除非每个字段只有一个重复项

除了大写/小写之外,还有一个是尾随空格。确保使用trim()删除尾随空格

另一件你可能想标准化的事情是你如何处理逃逸。如果有人输入的数据中有撇号,您需要手动转义,或者在较低的级别处理它,如使用magic_引号


此外,这里的代码很容易受到MySQL注入攻击。请务必阅读“mysql\u real\u escape\u string”的PHP手册页。

也许类似的东西可以工作?如果已经存在条目或没有条目,则可以运行代码:

if($variable != '') {
    $qry = "SELECT * FROM table WHERE column='$variable'";
    $result = mysql_query($qry);
    if($result) {
        if(mysql_num_rows($result) > 0) {
        //Already exists
        }
        else {
        //Doesn't already exist
        }
    }
    else {
        die("Query failed");
    }

}

也许像这样的方法行得通?如果已经存在条目或没有条目,则可以运行代码:

if($variable != '') {
    $qry = "SELECT * FROM table WHERE column='$variable'";
    $result = mysql_query($qry);
    if($result) {
        if(mysql_num_rows($result) > 0) {
        //Already exists
        }
        else {
        //Doesn't already exist
        }
    }
    else {
        die("Query failed");
    }

}

除了这里的其他人所说的之外,你可能是做错了支票。首先,您的两个查询可以合并为一个:

$dup = mysql_query("SELECT TRUE FROM $tabelle WHERE inp='$inp' AND titel='$titel' LIMIT 1");
if (mysql_num_rows($dup)) {
    // duplicate playlist
}

现在更容易看出,只有当两个字段都匹配时,您才会失败。不确定您是否真的打算在那里进行
,但即使您这样做了-您更愿意用这种方式进行检查,在大型表格上节省了很多钱。

除了其他人在这里所说的之外,您可能在做错误的检查。首先,您的两个查询可以合并为一个:

$dup = mysql_query("SELECT TRUE FROM $tabelle WHERE inp='$inp' AND titel='$titel' LIMIT 1");
if (mysql_num_rows($dup)) {
    // duplicate playlist
}

现在更容易看出,只有当两个字段都匹配时,您才会失败。不确定您是否真的打算在那里进行
,但即使您这样做了,您还是希望通过这种方式进行检查,这样可以在大型表上节省很多钱。

注意:未定义的变量:inp、titel、link。XSS&sql注入……请注意,您可以使用OR语句连接两个查询的内容:
从$tabelle中选择inp,其中inp='$inp'或titel='$titel'
注意:未定义变量:inp,titel,link。XSS和sql注入…请注意,您可以使用OR语句连接两个查询的内容:
从$tabelle中选择inp,其中inp='$inp'或titel='$titel'
谢谢。请务必选择问题的答案!谢谢请务必选择问题的答案!