2016-07-27 5 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(); 
} 

Когда я прохожу статического значение для $ подкатегории (который закомментирована), то он работает просто отлично. Но когда это же значение передается через массив и ограничено, оно возвращает исключение для нарушения целостности внешнего ключа .

Для получения дополнительной информации об этом вопросе. У меня есть внешний ключ, связанный с моим столбцом sub_category_id таблицы shop_detail с подкатегорией таблица с тем же именем столбца.

Важно. Величина, которая привязана и вставлена, существует в моей таблице подкатегории.


Вот подробная ошибка.

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

Можете ли вы разместить var_dump $ catexplode? – Bert

+0

@Bert Большое спасибо. Насколько я знаю, причина, по которой вы просили var_dump, - проверить тип данных. И я прямо превратил мою переменную в целое, и это сработало для меня. большое спасибо. – Archit

ответ

0

Технически вы делаете это неправильно. Вы должны связать РАЗ вне цикла:

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

Весь смысл привязки переменной к заполнителем является то, что вы только сделать привязку РАЗ. Внутренне PHP будет устанавливать то, что составляет указатель/ссылку на связанную переменную, так что любые изменения в значении переменной будут подняты, когда вы действительно выполняете инструкцию.

+0

Спасибо @Marc B за интерес и исправление. Хотя проблема была в типе данных, и я, наконец, решил ее решить, явно переведя строку в целое число. – Archit

Смежные вопросы