防止重复行插入php/mysql

问题描述:

我试图从文本框中插入多个记录到mysql表中。 如果我输入2个以上的记录,它将插入重复项。 这是代码。 我在做什么错?防止重复行插入php/mysql

一些更多的信息

表信息

id (int) primary auto_increment 
email (varchar) 
imei (varchar) 
date_ordered (datetime) 
status(varchar) 

由于这仅仅是个开始,我有改变的表结构没有问题。

$email = $_SESSION['email']; 
$now = time(): 
$status = "1"; 

$imeis = $_POST['imeis']; 
$row = explode("\n", $imeis); 

foreach ($row as $key => $imei) 
{ 
    $imei = mysql_real_escape_string($imei); 

    $query = "SELECT * FROM orders WHERE imei = '$imei'"; 
    $result = mysqli_query($link, $query); 

    if (mysqli_num_rows($result) == 0) 
    { 
     $query1 = "INSERT IGNORE INTO orders (email, imei, date_ordered, status) VALUES ('$email', '$imei', '$now', '$status')"; 
     $result1 = mysqli_query($link, $query1) OR die("fml"); 

     if ($result1) 
     { 
      echo "Added $imei<br>"; 
     } 
    } 

    else 
    { 
     echo "<B>$imei</B> already there<br>"; 
    } 

} 
+0

这部分可能会很棘手'或死(“fml”)' –

+0

@BarbarosÖzhan这不是真的有帮助。 @OP第一个问题可能是'INSERT IGNORE'。这就像说:我不在乎是否有重复,只是忽略它并继续。其次,'OR死亡(“fml”)'根本没有帮助你。它会告诉你有问题,但不是问题所在。直到生产完成,你应该使用'OR die(“Errormessage:%s \ n”,mysqli_error($ link))'',这样你才能从中得到一些有用的信息。 – icecub

+0

@icecub谢谢,对我有用。 –

它看起来像你希望imei的每个值在您的表中是唯一的。这是一个猜测,但它看起来像你在做什么。

您可以通过将imei列定义为唯一的方式在SQL中执行该操作:即通过在其上创建唯一索引。您现在的表格有一个id作为唯一(主键)。您可以轻松创建另一个。