通过PHP文件在表中插入唯一数据


inserting unique data in the table by php file

create table member(
member_id int not null auto_increment,
member_name varchar(50) not null,
look_contact_number int(4) default 5,
primary key(member_id)
)
create table contact_viewed(
contact_viewed_id int(11) not null auto_increment,
contacted_member_id int (11) not null,
member_id int(11) not null,
primary key(contact_viewed_id)
);

我想在contact_viewed表中插入数据,其中member_id可以相同,这意味着一个成员可以看到多个联系人,但contacted_member_id应该是唯一的。

我使用请求参数id的url见下面

/contact_viewed.php?id=1; 

首先,如果member_id=2在表成员中没有数据,那么在表中插入数据,然后我通过rowCount()方法检查,如果member_id=2在成员表中有数据,那么检查contacted_member_id在数据库中是否可用,如果可用则不做任何事情,如果不可用则将数据插入数据库。

我的问题是当foreach循环执行时,它会插入id != contacted_member_id的数据,如果有人有想法,请帮助我。

<?php
    $stmt7 = $DB_con->prepare ( "SELECT * FROM contact_viewed WHERE member_id=:member_id" );
    $stmt7->bindParam ( ":member_id", $m_id );
    $stmt7->execute ();
    $row2 = $stmt7->fetchAll ();
    if ($stmt7->rowCount () > 0) {
    foreach ( $row2 as $data ) {
            if ($data ['member_id'] == $m_id) {
                if($data ['contacted_member_id'] == $_GET['id']){
                    echo "do nothing1";
                }
                else{
                    $stmt6 = $DB_con->prepare ( "INSERT INTO contact_viewed(contacted_member_id,member_id) VALUES(:contacted_member_id,:member_id)" );
                    $stmt6->bindParam ( ":contacted_member_id", $_GET ['id'] );
                    $stmt6->bindParam ( ":member_id", $m_id );
                    $stmt6->execute ();
                    echo "hello";
                }
            } 
        } 
    }
    else{
        $stmt6 = $DB_con->prepare ( "INSERT INTO contact_viewed(contacted_member_id,member_id) VALUES(:contacted_member_id,:member_id)" );
        $stmt6->bindParam ( ":contacted_member_id", $_GET ['id'] );
        $stmt6->bindParam ( ":member_id", $m_id );
        $stmt6->execute ();
        $available_contact = $userRow ['available_contact'];
        $available_contact = $available_contact - 1;
        $stmt5 = $DB_con->prepare ( "UPDATE member SET available_contact=:available_contact WHERE member_id=:member_id" );
        $stmt5->bindParam ( ":available_contact", $available_contact );
        $stmt5->bindParam ( ":member_id", $m_id );
        $stmt5->execute ();
        echo "ok ok";
    }
    ?>

试试这个:

<?php
    $stmt7 = $DB_con->prepare ( "SELECT * FROM contact_viewed WHERE member_id=:member_id AND contacted_member_id=:contacted_member_id" );
    $stmt6->bindParam ( ":contacted_member_id", $_GET ['id'] );
    $stmt7->bindParam ( ":member_id", $m_id );
    $stmt7->execute ();
    $row2 = $stmt7->fetchAll ();
    if ($stmt7->rowCount () == 0) {
        $stmt6 = $DB_con->prepare ( "INSERT INTO contact_viewed(contacted_member_id,member_id) VALUES(:contacted_member_id,:member_id)" );
        $stmt6->bindParam ( ":contacted_member_id", $_GET ['id'] );
        $stmt6->bindParam ( ":member_id", $m_id );
        $stmt6->execute ();
        $available_contact = $userRow ['available_contact'];
        $available_contact = $available_contact - 1;
        $stmt5 = $DB_con->prepare ( "UPDATE member SET available_contact=:available_contact WHERE member_id=:member_id" );
        $stmt5->bindParam ( ":available_contact", $available_contact );
        $stmt5->bindParam ( ":member_id", $m_id );
        $stmt5->execute ();
        echo "ok ok";
    }