2013-10-05 23 views
0

你好我有以下PDO插入到数据库函数中,我如何检查数据库中是否存在这样一个已记录的错误,用户已经注册了这些信息?我的表是组织这样的PDO INSERT不会在mysql中注册重复的记录

id | curso_id | user_id 
1 | 12  | 43 
2 | 5  | 56 

因此,如果数据库里curso_id的组合= 12,USER_ID = 43是不注册这样的第二个,给错误。

$userid = $_SESSION['userID']; 
$cursoid = $_GET["id"]; 

try { 

      $con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); //our new PDO Object 
      $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $stmt = $con->prepare("Insert Into subscriptions (curso_id, user_id) Values ('$cursoid', '$userid')"); 
      $stmt->execute(); 

     } catch (PDOException $e) { 
       echo "I'm sorry there is a problem with your operation.."; $e->getMessage(); //catch and show the error 
     } 

$con = null; 
header('Location: cursos.php') ; 
} 

感谢您的帮助提前

+0

就在方评论,你不使用准备好的语句。 – Mihai

+0

$ userid来自会话中的有用用户。而$ cursoid来自另一个数据库sqlquery,它显示数据库中的文章 –

+0

这个想法是将两个列进行合并,并且如果在插入的内容上存在匹配,则会发生错误,以避免重复记录。 $ userid它总是> 0,因为在每一个插入你在这两列上插入的东西。 –

回答

0

设置UNIQUE索引:unique(curso_id, user_id)约束。
然后你就可以使用查询像这样与ON DUPLICATE KEY UPDATE条款:

INSERT INTO subscriptions 
    (curso_id, user_id) 
    VALUES 
    ('12', '43') 
    ON DUPLICATE KEY UPDATE user_id = user_id; 

如果affected-rows1,一个新的行插入。
如果affected-rows2,则更新现有行。

根据受影响的行值,您可以选择向用户显示适当的消息。
...

INSERT ... ON DUPLICATE KEY UPDATE
REPLACE
Insert to table or update if exists (MySQL)

+0

使用这种方法可以更新这两个语句像UPDATE user_id = user_id; AND curso_id = curso_id; ? –

+0

好吧我已经弄明白了,现在它工作非常好,谢谢 –

0

主动三思之前。插入前执行select,这会告诉您是否已经有相关记录。

正在反应,将unique(curso_id,user_id)约束添加到您的表。当一切都失败时,这将保护您的数据...