Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果MySQL上已经存在值,则不要复制该值_Php_Sql_Duplicates_Ignore - Fatal编程技术网

Php 如果MySQL上已经存在值,则不要复制该值

Php 如果MySQL上已经存在值,则不要复制该值,php,sql,duplicates,ignore,Php,Sql,Duplicates,Ignore,我一直在努力做到这一点,但其他问题我就是想不出来。我一直在阅读posibles解决方案,但没有一个与我的代码一起使用,或者如果它们与我的代码一起使用,我就不知道如何或在哪里使用它们 我有一个数据库,用户在其中发送记录。数据库由几个表组成,其中包含以下“名称、姓氏、电话”。如果这些值中的任何一个重复,我希望我的代码识别并忽略表单的提交,如果DB上已经存在所有这些值 这是我的密码: <?php $con = mysql_connect("HOST","USER

我一直在努力做到这一点,但其他问题我就是想不出来。我一直在阅读posibles解决方案,但没有一个与我的代码一起使用,或者如果它们与我的代码一起使用,我就不知道如何或在哪里使用它们

我有一个数据库,用户在其中发送记录。数据库由几个表组成,其中包含以下“名称、姓氏、电话”。如果这些值中的任何一个重复,我希望我的代码识别并忽略表单的提交,如果DB上已经存在所有这些值

这是我的密码:

        <?php

        $con = mysql_connect("HOST","USER","PASS");
        if (!$con)
          {
          die('Could not connect: ' . mysql_error());
          }

        mysql_select_db("testdb", $con);
        $sql="INSERT INTO people (Name, LastName, Phone)
        VALUES
        ('$_POST[Name]','$_POST[LastName]','$_POST[Phone]')";

        if (!mysql_query($sql,$con))
          {
          die('Error: ' . mysql_error());
          }

        echo "Record Added";

        mysql_close($con);
        ?>

mysql的
mysql.*
函数现在都不推荐使用,永远不应该使用。更改代码以执行以下操作:

//Set up a PDO connection to MySQL
$host = 'host_name';
$dbname = 'database_name';
$user = 'user_name';
$pass = 'user_pass';
try
{
    $DB = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
}
catch(PDOException $e)
{  
    echo $e->getMessage();  
}

//Determine whether the appropriate values have been passed.
if(isset($_POST['Name']))
{
    $name = $_POST['Name'];
}
else
{
    echo "You must provide a name!";
        exit; //This may not be what you want to do here, it's an example action
}

if(isset($_POST['LastName']))
{
        $name = $_POST['LastName'];
}
else
{
    echo "You must provide a last name!";
        exit; //This may not be what you want to do here, it's an example action
}

if(isset($_POST['Phone']))
{
        $name = $_POST['Phone'];
}
else
{
    echo "You must provide a phone number!";
        exit; //This may not be what you want to do here, it's an example action
}


//Set up the query using anonymous values
$sql="INSERT INTO people (Name, LastName, Phone) VALUES ('?','?','?')";
$sth = $DB->prepare($sql);

try
{
        //Attempt to execute the insert statement
        $sth->execute(array($_POST[Name], $_POST[LastName], $_POST[Phone]));
        echo "Record Added";

}
catch(PDOException $e)
{
        //If the insert failed, then you can handle the error, and determine
        //what further steps need to be taken.
        echo "Record Not Added";
}
下面是另一个类似设置的问题,可能对您也很有用:


插入前在表中搜索

 <?php

        $con = mysql_connect("HOST","USER","PASS");
        if (!$con)
          {
          die('Could not connect: ' . mysql_error());
          }

        mysql_select_db("testdb", $con);

        $name =  mysql_real_escape_string($_POST[Name]);
        $LastName=  mysql_real_escape_string($_POST[LastName]);
        $Phone=  mysql_real_escape_string($_POST[Phone]);

         $search_res=mysql_query("SELECT * from people where Name='$Name' OR LastName='$LastName' OR Phone='$Phone'");

        if(mysql_num_rows($search_res) < 1){

             $sql="INSERT INTO people (Name, LastName, Phone)
             VALUES
                ('$Name','$LastName','$Phone')";

               if (!mysql_query($sql,$con))
              {
              die('Error: ' . mysql_error());
              }

        echo "Record Added";
       }else{
          echo "User Already exits";
       }

        mysql_close($con);
        ?>

试试这个简单的解决方案

$result = mysql_query("SELECT * FROM TABLE WHERE Column = 'value' ");

if( mysql_num_rows($result) < 1) {
    mysql_query("INSERT INTO table (column) VALUES ('value') ");
}
$result=mysql\u查询(“从表中选择*列='value'”);
if(mysql_num_rows($result)<1){
mysql_查询(“插入表(列)值('value')”;
}

您想在表上设置一个
唯一的
键。此外,您的代码对SQL注入是完全开放的,如果您还没有进行过SQL注入,您将受到黑客攻击。学习将准备好的查询与PDO或类似的工具一起使用。@只有一个唯一的键不会起作用。您必须插入“忽略”,否则在尝试添加重复项时会出现错误。@SamHuckaby,对。。。难道你不想抓住它,用某种方式来处理它吗<代码>忽略
可能是在这种情况下您最不想做的事情。也许你想提示用户数据已经存在或其他什么。@Brad,我现在只是在试验这种类型的编码。在深入研究其他东西之前,我试着想一些事情。我真的很感谢你的评论,现在让我谈谈这个问题,我会把它列在待办事项清单上。但现在我只需要一个选择或想法来实现这个想法。谢谢@Edwinrif,停止学习
mysql.*
,至少切换到
mysqli
。至少,您必须转义数据。即使出于某种原因,你没有考虑安全性,但是如果有人在输入框中输入引号,你的查询就会失败。这不能回答OP的问题。但是,如果没有在表上设置适当的
UNIQUE
约束,它也不起作用。@Brad我在最后有关于设置唯一键的信息,为了简洁起见,我使用了他的查询。@SamHuckaby您应该在答案中添加关于设置该键的信息。此外,发布不安全的代码也是危险的。很多不太懂的人会简单地复制粘贴它。答案中的代码应该是高质量的。@Brad,我理解你的观点,我正在更新我的答案。我将演示如何设置PDO连接,并测试该值是否已添加,并给出错误信息。:)感谢您的建设性批评。请不要忘记使用mysql_real_escape_string()解析表单字段值,如果使用新版本的PHP-1,请使用mysqli,此代码会受到SQL注入攻击,不应使用。请参阅上面的注释,我只是解释如何从数据库中搜索,而不是插入重复的记录。把它放在你的代码中,我会删除否决票。如果有人在<代码> >选择< /COD>和<代码> INSERT /COD>之间做一个<代码>插入< /代码>,这将发生什么。这是不够的。可以在两个查询之间插入值。您可以修改它以消除重复条目