0

您好,我有以下 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 {

          $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' ) ;
}

我在这里先向您的帮助表示感谢

4

2 回答 2

0

积极主动先看再跳。在插入之前执行 a select,它将显示是否已经有相关记录。

被动地,向您的表添加一个unique(curso_id,user_id)约束。当其他一切都失败时,这将保护您的数据......

于 2013-10-05T23:24:31.233 回答
0

设置唯一索引:unique( curso_id, user_id )约束。
然后你可以使用这样的查询 withON 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
插入表或更新(如果存在)(MySQL)

于 2013-10-06T02:10:15.080 回答