当我尝试插入具有不允许其中一个值的外键约束的表时,它只返回一个空结果集,尽管我希望它抛出错误1452来执行回滚。由于未插入数据集,因此php中的execute返回true。我获得所需行为的解决方法是检查受影响的行数是否等于0并且我自己抛出异常。但是,我想知道为什么我会得到这种行为,如果我的解决方法可能会导致一些问题。
UPDATE1:
diagram of the affected part of the DB
if($stmt = $mysqli->prepare("INSERT INTO service_categories
SELECT T1.cat_id, ?
FROM category_languages T1
INNER JOIN languages T2 ON T1.cat_lang = T2.lang_id
WHERE (T2.lang_name_iso3 = ?) AND (T1.cat_title=?)")){
$stmt->bind_param('iss', $service_id, $service_language_name, $service_category);
$exec_successful = $stmt->execute();
if((!$exec_successful) or ($mysqli->affected_rows === 0)){
//failure: INSERT
$mysqli->rollback();
}
}
当我尝试将service_category
插入service_categories
cat_id
categories
时,execute()
中不存在外键约束阻止插入成功。这是它应该做的,但true
仍然返回affected_rows
而0
正在返回chmod 777 somefile
。
UPDATE2: