ОБНОВЛЕНИЕ таблицы в MySQL, содержащей столбец внешнего ключа - PullRequest
2 голосов
/ 05 апреля 2011

Я работаю с 3 таблицами, связанными с внешними ключами, а также с настройками ON UPDATE CASCADE и ON DELETE CASCADE. Эти таблицы category, subcategory и products.

products таблица - PID (PK), название продукта, субкатода (FK)

subcategory таблица - подкатегория (PK), имя подкатегории, catid (FK)

category таблица - катид (PK), имя категории

Какой правильный запрос к таблице UPDATE продуктов, если я хочу изменить название продукта? Также, если я хочу изменить подкатегорию продукта с помощью формы?

Я использую форму, которая успешно заполняется полями - название продукта, название подкатегории, но не обновляет записи в таблице продуктов, означает, что она ничего не делает и не меняет название продукта и название подкатегории.

Любая помощь приветствуется.

использую следующий код

<?php 
// Parse the form data and add inventory item to the system
if (isset($_POST['PRODUCT_NAME'])) {
    $pid = mysql_real_escape_string($_POST['thisPID']);
    $catalog_no = mysql_real_escape_string($_POST['CATALOG_NO']);
    $product_name = mysql_real_escape_string($_POST['PRODUCT_NAME']);
    $price = mysql_real_escape_string($_POST['PRICE']);
    $composition = mysql_real_escape_string($_POST['COMPOSITION']);
    $size = mysql_real_escape_string($_POST['SIZE']);
    $subcat = mysql_real_escape_string($_POST['SUBCAT_ID']);
    // See if that product name is an identical match to another product in the system
    $sql = mysql_query("UPDATE products SET CATALOG_N0='$catalog_no', PRODUCT_NAME='$product_name', PRICE='$price', COMPOSITION='$composition', SIZE='$size', SUBCAT_ID='$subcat' WHERE PID='$pid'");
    header("location: inventory_list.php"); 
    exit();
}
?>

<?php 
// Gather this product's full information for inserting automatically into the edit form below on page
if (isset($_GET['pid'])) {
    $targetID = $_GET['pid'];
    $sql = mysql_query("SELECT products.PID, products.CATALOG_NO, products.PRODUCT_NAME, products.PRICE, products.COMPOSITION, products.SIZE, products.SUBCAT_ID, subcategory.SUBCAT_ID, subcategory.SUBCATEGORY_NAME FROM (products, subcategory) WHERE subcategory.SUBCAT_ID=products.SUBCAT_ID AND PID='$targetID' LIMIT 1");
    $productCount = mysql_num_rows($sql); // count the output amount
    if ($productCount > 0) {
        while($row = mysql_fetch_array($sql)){ 

             $catalog_no = $row["CATALOG_NO"];
             $product_name = $row["PRODUCT_NAME"];
             $price = $row["PRICE"];
             $composition = $row["COMPOSITION"];
             $size = $row["SIZE"];
             $subcat = $row["SUBCAT_ID"];
        }
    } else {
        echo "You dont have that product";
        exit();
    }
}
?>

1 Ответ

3 голосов
/ 05 апреля 2011

Вы не используете название продукта в качестве внешнего ключа, поэтому простой стандарт

UPDATE products SET productname='New Name of Product' where PID=XXX;

сделает трюк. То же самое относится и к субкатоду в продуктах. До тех пор, пока новый идентификатор подкадра существует в таблице подкатегорий, вы можете изменить products.subcatid на что угодно, снова с помощью простого

UPDATE products SET subcatid=New_ID where PID=XXX;
...