Bir sorunum var, INSERT ... ON DUPLICATE KEY UPDATE satır güncelleştirme yerine yeni bir kayıt ekliyor, kullandığım tabloyu bir birincil anahtar hem de ve benzersiz bir anahtar. Bu yüzden bunun neden olduğu konusunda kafam karıştı.DUPLICATE ANAHTARI benzersiz anahtar ile güncelleştirme yerine yeni kayıt ekler
Tablo
CREATE TABLE `Product` (
`Product_Id` bigint(255) NOT NULL AUTO_INCREMENT,
`Resturant_ID` bigint(255) NOT NULL,
`Product_Desc` text NOT NULL,
`Product_Name` varchar(100) NOT NULL,
`Product_Price` decimal(8,0) NOT NULL,
`Add_On_ID` int(11) NOT NULL,
PRIMARY KEY (`Product_Id`),
UNIQUE KEY `Product_Name` (`Product_Name`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8
SORGU
$add_product_errors = array();
if (isset($_POST['add'])) {
$item_name = $_POST['item_name'];
$desc = $_POST['desc'];
$price = $_POST['price'];
$rest_id = mysqli_real_escape_string($dbc, $_SESSION['Resturant_ID']);
if (empty($_POST['price']) || !filter_var($_POST['price'], FILTER_VALIDATE_FLOAT) || ($_POST['price'] <= 0)) {
$add_product_errors['price'] = "Please enter a product price";
}
if (empty($_POST['item_name'])) {
$add_product_errors['item_name'] = "Please enter a name";
}
if (empty($_POST['desc'])) {
$add_product_errors['desc'] = "Please enter a product description";
}
$query = "INSERT INTO Product(Resturant_ID,Product_Name,Product_Desc,Product_Price) VALUES (?,?,?,?)
ON DUPLICATE KEY
UPDATE
Resturant_ID = VALUES(Resturant_ID)
,Product_Name = VALUES(Product_Name)
,Product_Desc = VALUES(Product_Desc)
,Product_Price = VALUES(Product_Price)";
$run_query = mysqli_prepare($dbc, $query);
if (!$run_query) {
die(mysqli_error($dbc));
}
mysqli_stmt_bind_param($run_query, 'sssd', $rest_id, $item_name, $desc, $price);
$execute = mysqli_stmt_execute($run_query);
$item_name = strip_tags($_POST['item_name']);
$desc = strip_tags($_POST['desc']);
//100 - changes the way the decimal displays in database
$price = strip_tags($_POST['price'] * 100);
if ($execute) {
echo "<script> alert('Addrrss Saved')</script>";
} else {
echo "<b>Oops! we have an issue </b>";
mysqli_stmt_close($run_query);
}
}
?>
"ON UPDATE" değerindeki değerleri değiştirmiyorsunuz - [buraya bakın] (http://dba.stackexchange.com/questions/110781/insert-on-duplicate-key-update-not-working) gibi--i-bekliyoruz. Ayrıca [INSERT..ON DUPLICATE UPDATE için mysql belgelerini verin] (http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html) bir okuma: değil 1'den fazla benzersiz anahtar ile 'DUPLICATE UPDATE'DE 'kullanın. Temiz görünebilir, ancak Ürün Adının benzersiz olmasını istiyorsanız, kodunuzda bunu işlemekten çok daha iyisiniz. Daha sonra çift ürünü yükleyebilir ve güzel bir hata mesajıyla kullanıcıya gösterebilirsiniz. – Kenney
'Resturant_ID bigint (255) NOT NULL' Bu çok büyük ve orantısız bir süre, koç ve depolama alanı alacaktır. Köşeli parantez içindeki sayı, gerçek değerin kendisinin değil, değerinin * uzunluğunu * tanımlar, böylece bu sayıyı 255 haneye kadar çıkacak şekilde ayarlarsınız. Bir karşılaştırma olarak 8'den fazlasına ihtiyacınız olduğundan şüphe duyuyorsunuz, [unix zaman damgası] (https://en.wikipedia.org/wiki/Unix_time), 1970'den beri her saniye olan sadece 10 basamak uzunluğunda. – Martin
@Martin Web sitesi şu anda 90 imtiyaz sahibi olan bir franchise için üretildiğinden ve büyümeye devam etmekte olduğu için büyümeye devam ediyor. Bazı franchise her biri 50'den fazla restoran var. Ama ne demek istediğimi anladım – jerneva