2016-03-24 25 views
-1

Güncelleme ve veritabanına ekleyerek en kötü şansa sahip oldum. Veritabanımdaki eklerim mükemmel çalışıyor, sadece güncelleme yapıyorum.MYSQL - DUPLICATE TUŞU güncellenmiyor

Biri diğerini güncellemek için iki ayrı sorgudan yoruldum, ancak güncelleştirme hiçbir zaman çalışmaz. Şu anda AÇIK DUPLICATE KEY tetikleyicisini kullanıyorum ve bir kez daha bilgi güncellemek yerine her seferinde bir kayıt ekliyor. Nerede yanlış gidiyorum? Bunun üzerinde bir buçuk yıldır çalışıyordum ve hiçbir yere ulaşamadım. newbee sorunları!

<?php 
    $Cust_ID = $_SESSION["CustomerID"]; 
    if (isset($_POST['Update'])) { 
     $c_fname = $_POST['fname']; 
     $c_lname = $_POST['lname']; 
     $c_email = $_POST['email']; 
     $c_phone = $_POST['phone']; 

    // Save $_POST to $_SESSION 
    //query 

    $insert_det = "INSERT INTO Cus_acc_details(CUS_Fname,CUS_Lname,Cus_Email,CUS_Phone) 
    VALUES (?,?,?,?) 
    ON DUPLICATE KEY 
    UPDATE 
    CUS_Fname = '$c_fname', 
    Cus_Lname = '$c_lname'"; 

$stmt = mysqli_prepare($dbc, $insert_det); 
//new 
// $stmt = mysqli_prepare($dbc, $insert_c); 
//debugging 
//$stmt = mysqli_prepare($dbc, $insert_c) or die(mysqli_error($dbc)); 

mysqli_stmt_bind_param($stmt, 'sssi', $c_fname, $c_lname, $c_email, $c_phone); 

/* execute query */ 
$r = mysqli_stmt_execute($stmt); 

// if inserted echo the following messges 
if ($r) { 
    echo "<script> alert('registration sucessful')</script>"; 
} 
} else { 
echo "<b>Oops! Your passwords do not </b>"; 
} 
?> 

HTML

<section class="container"> 
    <form id="myform " class="Form" method="post" action="Cus_Account.php?c_id=<?php echo $c_id ?>" accept-charset="utf-8"> 

     <!--     <div id="first">--> 
     <input type="text" id="fname" name="fname" value="<?php echo $_SESSION['fname']; ?>" required> 
     <input type="text" id="lname" name="lname" value="<?php echo $_SESSION['lname']; ?>" required> 
     <input type="text" id="email" name="email" value="<?php echo $_SESSION['Cus_Email']; ?>" required> 
     <input type="number" id="phone" name="phone" value="<?php echo $_SESSION['phone']; ?>" required> 
     <input type="submit" name="Update" value="Update"> 
     <br> 
    </form> 

CUSTOMER_ID ve saha en bd gibi benzersiz ayarlanır cus-sağlamamız gerekti, ancak, kayıt db içine ekleyerek devam ikisi. herhangi bir yardım takdir edilecektir.

GÖSTER Sen hiç

UNIQUE KEY CustomerID_2 (CustomerID, Cus_Email) 

değiştirmeniz gerekir

CREATE TABLE `Cus_acc_details` (
`CustomerID` tinyint(11) NOT NULL AUTO_INCREMENT, 
`AcctId` varchar(100) NOT NULL, 
`CUS_Fname` varchar(45) DEFAULT NULL, 
`Cus_Lname` varchar(45) DEFAULT NULL, 
`CUS_Phone` varchar(45) NOT NULL, 
`Cus_Email` varchar(200) NOT NULL, 
PRIMARY KEY (`CustomerID`), 
UNIQUE KEY `CustomerID` (`CustomerID`), 
UNIQUE KEY `CustomerID_2` (`CustomerID`,`Cus_Email`) 
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=outfit 
+1

Eğer soruya 'GÖSTER CREATE TABLE Cus_acc_details' çıkışını ekleyebilir miyim? – Barmar

+0

Tek başına "cus_email" endeksi kendi başına mı, yoksa (customer_id, cus_email) 'gibi birleşik bir dizin midir? İkincisi 'cus_email' benzersiz, sadece kimlik ve e-posta kombinasyonu yapmaz. Eklenen her satır farklı bir kimlik aldığından, yinelenen anahtar koşulu gerçekleşmez. – Barmar

+0

@Barmar bunu nasıl aşacağım. fname olarak, lname – jerneva

cevap

2

CREATE: Aksi

UNIQUE KEY Email (Cus_Email) 

, sadece müşteri kimliği kombinasyonu yapar ve benzersiz değil, e-posta e-posta kendi başına, böylece farklı kimlikleri olan çift e-postalarınız olabilir. INSERT numaranız kimliğini belirtmediğinden (AUTO_INCREMENT ile otomatik olarak eklendiği için) eklenen verilerin kopya anahtarı yoktur. Birincil anahtar otomatik olarak benzersiz anahtar olduğu için

Ayrıca,

UNIQUE KEY CustomerID (CustomerID) 

gerekmez.

Yani yapın:

ALTER TABLE Cus_acc_details 
    DROP KEY CustomerID, 
    DROP KEY CustomerID_2, 
    ADD UNIQUE KEY Email (Cus_Email); 
+0

Teşekkürler. çok fazla. Çok yakın olduğuma inanamıyorum ama çok uzak – jerneva