2014-09-11 89 views
1

我創建使用Apache Web服務器(phpMyAdmin的)插入行裏面PHP

一個PHP的網站外鍵的表我有3個表:

  1. 品牌
    • brand_id(PRIMARY KEY)自動遞增
    • BRAND_NAME
  2. 項目
    • ITEM_ID(PRIMARY KEY)AUTO INCREMENT
    • item_category
  3. 模型
    • MODEL_ID(PRIMARY KEY)AUTO INCREMENT
    • item_model
    • brand_id(對於brand.brand_id外鍵)
    • brand_name(item.item_id的FOREIGN KEY)
    • 數量
    • 價格

我有一個問題,當我想插入新值模型表格。

這是我使用的插入

if (isset($_POST['brand_id'])); 
    $brand = ($_POST['brand_id']); 
if (isset($_POST['item_id'])); 
    $cat = ($_POST['item_id']); 
if (isset($_POST['model'])); 
    $model = ($_POST['model']); 
if (isset($_POST['quantity'])) 
    $quantity = ($_POST['quantity']); 
if (isset($_POST['price'])) 
    $price = ($_POST['price']); 

     $sql = "INSERT INTO model (item_model, brand_id, item_id, quantity, price) 
       VALUES ('$model', '$brand', '$cat', '$quantity', '$price')"; 

請注意,我沒有插入任何值到MODEL_ID,因爲我認爲它會自動增加,因爲這是自動遞增PHP代碼。我不知道我是對還是錯。 isset值是從另一個PHP文件傳遞的。所以這個PHP基本上只是捕獲以前的PHP文件拋出的值。

我曾試圖從phpMyAdmin的使用SQL語句直接插入值,它會產生這樣的錯誤:

Cannot add or update a child row: a foreign key 
constraint fails (`stock`.`model`, CONSTRAINT `fk_item_brand` 
FOREIGN KEY (`brand_id`) REFERENCES `brand` (`brand_id`) ON UPDATE CASCADE) 

,如果我試圖把價值ID入列的一個,它會產生一個錯誤:

SQL query: 

INSERT INTO `model`(`model_id`, `item_model`, `brand_id`, `item_id`, `quantity`, `price`) 
VALUES (1,'a','1','1','a','a') 

MySQL said: Documentation 

#1062 - Duplicate entry '1' for key 'PRIMARY' 

如何在PHP中使用外鍵向表中插入一行?

+0

「我有問題」 - 問題是什麼?你正在做正確的自動增量。 – Barmar 2014-09-11 08:03:39

+0

你是對的,你不需要包含自動增量值。我真的不喜歡的是你如何直接在你的SQL命令中插入URL參數。不要這樣做,永遠。閱讀更多關於SQL注入在這裏:http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – 2014-09-11 08:05:08

+0

你有一些額外的分號在那裏你的'如果'語句。他們可能是問題。或者,如果你的某個變量沒有被實例化,可能會失敗,因爲沒有設置相應的'$ _POST'變量。無論如何,我會通過'POST'(例如類型和/或長度)來檢查傳遞給這個頁面的內容,也許使用'filter_var()',並且我會使用預處理語句並將這些值綁定到語句。 – 2014-09-11 08:05:26

回答

0
$sql = "INSERT INTO model (model_id,item_model, brand_id, item_id, quantity, price) 
       VALUES (null,'$model', '$brand', '$cat', '$quantity', '$price')"; 

試試這個。

添加自動增量字段並傳遞值null

+2

退出列與向其中插入「NULL」相同。 – Barmar 2014-09-11 08:04:04

+1

你的查詢和查詢有什麼區別? – 2014-09-11 08:04:47