MySQL只返回空结果集而不是抛出错误1452

时间:2016-04-05 05:21:10

标签: php mysqli transactions insert foreign-keys

当我尝试插入具有不允许其中一个值的外键约束的表时,它只返回一个空结果集,尽管我希望它抛出错误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_rows0正在返回chmod 777 somefile

UPDATE2:

sql fiddle of the affected part of the DB

0 个答案:

没有答案