2017-10-17 78 views
0

每当我想向数据库中插入某些东西时,我总是收到这个错误 我已经查看过堆栈,但答案太复杂了。在mysql代码中键“PRIMARY”的重复条目

错误是: 订购错误: 重复条目 '936791155' 关键 'PRIMARY'

$orderID = rand(); 
$orderQuery = "INSERT INTO Orders (OrderID, PersonID, ProductID, Quantity, Price, 
OrderDate) 
VALUES(".$orderID.",".$customerID.",".$productID.",".$selectedQuantity.",".$totalPrice.",'".$today."'"; 

if(mysqli_query($conn, $sqlQuery)) 
{ 
    echo "Order has been Successfull!"; 
} else { 
    echo "Order Error: ".$sql. "<br>" . mysqli_error($conn); 
} 

这里是我的设置代码的MySQL:

CREATE TABLE IF NOT EXISTS Orders (
OrderID int(11) AUTO_INCREMENT, -- Connects to table 'Customer' and ID 
PersonID int(11) NOT NULL, -- Connects to table 'Orders' and OrderUserID 
ProductID int(11) NOT NULL, 
Quantity int(11) NOT NULL, 
Price int(11) NOT NULL, 
OrderDate DATETIME, 
PRIMARY KEY (OrderID), 
FOREIGN KEY (PersonID) REFERENCES Customers(PersonID), 
FOREIGN KEY (ProductID) REFERENCES Products(ProductID) 
); 

编辑。我认为它是一个问题,$的customerID

$customerID = rand(); 
$sqlQuery = "INSERT INTO Customers (PersonID, FirstName, Address, Phone) 
VALUES (".$customerID.",'".$userName."','".$address."','".$phone."')"; 
    if(mysqli_query($conn, $sqlQuery)) { 
    echo "Member verified, in database"; 
} else{ 
    echo "Member Error: " . $sql . "<br>" . mysqli_error($conn); 
} 
+0

如果列类型为AUTO_INCREMENT,则不需要插入OrdrID。我想你可以在插入查询中省略该字段。 –

+0

此值已在主键的订单表中 – GYaN

+1

学习使用参数。不要使用参数值查询字符串。 –

回答

2

OrderID是自动递增列,你不必设置在插入语句它的价值,用这个来代替instert:

$orderQuery = "INSERT INTO Orders (PersonID, ProductID, Quantity, Price, 
OrderDate) 
VALUES(".$customerID.",".$productID.",".$selectedQuantity.",".$totalPrice.",'".$today."')"; 

刚刚获得从插入中删除".$orderID.",

我还建议您使用sql参数将值传递给查询,并且不要使用字符串连接。

+0

我试过了。它没有工作:(同一个错误 –

+1

@NicholasWalters你有同样的错误?或发生了什么?? – 2017-10-17 10:53:29

+0

同样的错误。我不明白它 –

0

我知道这有一个答案,但让我告诉你如何使用准备语句,这使得你的SQL更安全。

$stmt = $conn -> prepare("INSERT INTO Orders (PersonID, ProductID, Quantity, Price, OrderDate) VALUES (?,?,?,?,?)"); 
$stmt -> bind_param("iiiss", $customerID, $productID, $selectedQuantity, $totalPrice, $today); 

if($stmt -> execute()){ 
    echo "Order has been Successfull!"; 
}else { 
    echo "Order Error: ".$sql. "<br>" . mysqli_error($conn); 
} 
相关问题