2012-01-14 206 views
0

如何在数据库中已存在的变量的数组1中存储之前检查数据库。如果存在$explode[$i]则转到下一个。如果不存在,请运行下面的代码!检查数据是否已经存在

这是我在PHP代码:

$request_user_ids = $_GET['req']; 
    $explode = explode(',',$request_user_ids); 
    for ($i=0; $i<count($explode);$i++){ 

    $result = mysql_query(" 
      INSERT INTO fbinvite (memberid, fbsender, fbempfang, regdatum, fbreturn) 
      VALUES(NULL, '".$userid."', '".$explode[$i]."', NOW(), '0')"); 

我该怎么办,有没有双层刀片。

+2

这里有一个mysql命令,你想要的是IGNORE,所以你会忽略它,如果它已经存在。如果你想要一个Upsert或Merge,使用ON DUPLICATE。 – Matt 2012-01-14 01:14:44

+0

谢谢,大多数事情都很容易看到。我在'IGNORE'上做了“先到先得 - 第一次冲浪”,但忘记将fbempfang设置为“独特” – 2012-01-14 01:29:04

+2

不要忘记清理输入数据 – pxl 2012-01-14 01:33:32

回答

2

首先使相关的一组属性成为表的主键或唯一索引。

这时你有几种选择:

  • 盲目使用INSERT IGNORE INTO fbinvite ...,如果你只是想,如果条目存在忽略重复的数据或
  • 检查:SELECT memberid FROM fbinvite WHERE some_attr1 = $explode[...] AND some_attr2 = $explode[...];并继续适当:
    • 如果条目不存在,将其插入到表:INSERT INTO fbinvite ...
    • 如果条目存在:
      • 显示信息给用户,或者
      • 更新现有条目:UPDATE fbinvide ... WHERE ...
    • 插入或更新一次:INSERT ... ON DUPLICATE KEY UPDATE ...
+0

第一部分是更好的方法,否则查询可能会很长30个变量。 Thengo用一个简单的'IF($ result){}' – 2012-01-14 01:35:49

相关问题