2012-10-17 45 views
2

我有3個表是子類別,產品和prod_category。完整性約束違反PDO方法(創建查詢)php

當我創建我的產品時,如果成功,它將返回成功的product_id,之後它將捕獲表單子類別列,以執行下一個將product_id和subcategory_id插入prod_category表的查詢。我測試了一個單一的PHP文件來測試功能是否正常工作。它可以插入,但是當我適合我的情況時,它給了我這個錯誤。

警告:PDOStatement對象::執行()[pdostatement.execute]:SQLSTATE [23000]:完整性約束違規:1452不能添加或更新子行,外鍵約束失敗(yokotachiprod_category,約束prod_category_ibfk_4。外鍵(product_id)參考文獻productproduct_id)ON DELETE CASCADE ON UPDATE CASCADE)在C:\ XAMPP \ htdocs中\ yokotachi \模型\ Prod_category.php第27行

本人確認,2參數被傳遞到該函數,但我不知道爲什麼它不能執行查詢。

if($_POST){ 
$title = mysql_real_escape_string($_POST['title']); 
$model = mysql_real_escape_string($_POST['model']); 
$description = stripslashes($_POST['description']); 
$feature = stripslashes($_POST['feature']); 
$specification = stripslashes($_POST['specification']); 

$subcategory_name = mysql_real_escape_string($_POST['product_subcategory']); 

$sub_obj = $subcategory->find_by_sub_category_name($subcategory_name); 

$subcategory_id = $sub_obj->sub_category_id; 
echo $subcategory_id; 
$executed_product_id= 
    $product->create($title,$model,$description,$feature,$specification); 
echo "im here".$subcategory_id; 
echo $executed_product_id; 
$responde = $prod_category->create($executed_product_id,$subcategory_id); 
if($responde){ 
    echo "<script>"; 
    echo "alert(".$executed_product_id.");"; 
    echo "</script>"; 
    header("location: ../../../views/admin/product/product_index.php"); 
}} 

我看到1帖子是reindex問題,並要求截斷表格。但我不知道如何在我的情況下執行截斷查詢。

在此先感謝。

+0

你是設置數據庫表的人還是別人的工作? –

+0

@ N.B .:我會說別人設置了表格。致OP:閱讀_ [FOREIGN KEY CONSTRAINTS](http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html)_,並且爲了避免必須做3個單獨的查詢:_ [JOIN](http://dev.mysql.com/doc/refman/5.0/en/join.html)_。 –

+0

liine 27是什麼? –

回答

0

錯誤消息似乎告訴您,表「prod_category」中您嘗試使用的產品ID號在表「product」中不存在。

您需要找出該行執行後$ execution_product_id具有的值。

$executed_product_id= 
    $product->create($title,$model,$description,$feature,$specification); 

如果它所具有的值不在表「product」中,那就是你的問題。在「prod_category」中使用它之前,外鍵引用要求產品ID存在於「產品」中。

+0

Oic,但實際上execution_product_id是product_id,它是返回時執行 $ product> create($ title,$ model,$ description,$ feature,$ specification); 我試圖在執行查詢之前回顯,並且有一個已經存在的值。即使在執行函數之後,在準備語句之後和執行查詢之前,我試圖將其回顯出來,並且它具有我想要的值。所以,我不知道,它怎麼可能是這樣的:( – Nich

+0

你是怎麼回聲?PHP變量?如果是這樣,看看實際的表格。 –

+0

yup,怎麼說看看實際表格?意思是你的意思是在執行create時,是否存在或創建了product_id? – Nich