2016-07-27 49 views
0

我有一個簡單的PDO到MYSQL數據庫的插入代碼。動態傳遞值時PDO異常

這是我的代碼。

$catinsert="insert into shop_detail(shop_id,sub_category_id)values(:shop_id,:subcatid)"; 

$catresult=$pdocon->prepare($catinsert); 

foreach($catexplode as $catval) 
{ 
    $subcat=$catval; 
// $subcat=6; 
    $catresult->bindValue(':shop_id',$shopid,PDO::PARAM_INT); 
    $catresult->bindValue(':subcatid',$subcat,PDO::PARAM_INT); 
    $catresult->execute(); 
} 

當我傳爲$ SUBCAT的靜態值(被註釋掉),那麼它工作得很好。但是,當相同的值通過數組傳遞並且有界時,它會返回外鍵完整性違例的異常。

爲了這個問題的背景。我有一個外鍵,它將shop_detail表的sub_category_id列與子類別表中的列名稱相同。

重要。 正在綁定和要插入的值確實存在於我的子類別表中。


這裏是詳細的錯誤

exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`list`.`shop_detail`, CONSTRAINT `shop_to_subcat` FOREIGN KEY (`sub_category_id`) REFERENCES `sub_category` (`sub_category_id`))' in somewhat file.

+1

你可以發佈$ catexplode的var_dump嗎? – Bert

+0

@Bert非常感謝..據我所知,你要求var_dump的原因是檢查數據類型。我直接將我的變量轉換爲整數,併爲我工作。非常感謝。 – Archit

回答

0

技術上你這樣做是錯誤的。您應該在循環的外部綁定ONCE:

$subcat = null; 
$stmt->bindParam(':subcatid', $subcat); 
foreach($catexplode as $subcat) { 
    $stmt->execute(); 
} 

將變量綁定到佔位符的要點是您只需綁定ONCE。 PHP內部將設置相當於指向綁定變量的指針/引用,以便在實際執行語句時,變量值的任何更改都將被拾取。

+0

感謝@Marc B的興趣和糾正。雖然問題是數據類型,我終於通過明確地將字符串轉換爲整數來解決問題。 – Archit