Php PDO INSERT不在mysql中注册重复记录
您好,我有以下PDO插入数据库函数,我如何检查数据库中是否已经记录了这样一个错误,即用户已经注册了此信息?我的桌子是这样整理的Php PDO INSERT不在mysql中注册重复记录,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,您好,我有以下PDO插入数据库函数,我如何检查数据库中是否已经记录了这样一个错误,即用户已经注册了此信息?我的桌子是这样整理的 id | curso_id | user_id 1 | 12 | 43 2 | 5 | 56 因此,如果curso_id=12和user_id=43的组合在数据库中,请不要注册这种类型的第二个组合,给出错误 $userid = $_SESSION['userID']; $cursoid = $_GET["id"]; try {
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' ) ;
}
提前感谢您的帮助,三思而后行。在插入之前执行
选择
,这将显示是否已有相关记录
反应性地,将
唯一(游标id、用户id)
约束添加到表中。这将在所有其他操作都失败时保护您的数据…设置唯一索引:UNIQUE(curso\u id,user\u id)
约束。然后您可以在重复密钥更新时使用类似于
的查询子句:
INSERT INTO subscriptions
( curso_id, user_id )
VALUES
('12', '43')
ON DUPLICATE KEY UPDATE user_id = user_id;
如果受影响的行
为1
,则插入新行。
如果受影响的行
为2
,则会更新现有行
根据受影响的行值,您可以选择向用户显示适当的消息。
只是一个旁注,您没有使用准备好的语句。$userid来自会话中的登录用户。$cursoroid来自另一个数据库sqlquery,该数据库显示数据库中的文章。其目的是使两个列兼容,如果插入的内容匹配,则一定要给出错误,不要放置重复的记录$userid它将始终大于0,因为每次插入时,您都在两列上插入内容。使用此方法可以更新这两个语句,如update user\u id=user\u id;而curso_id=curso_id?好的,我确实想出来了,现在它工作得很好,谢谢