PHP / MYSQL - 在INSERT INTO的情况下检查成功/失败...什么不存在

时间:2018-02-07 19:09:40

标签: php mysql

仅当具有特定值的现有记录尚不存在时,才使用以下查询添加/插入记录:

PHP:

$query = "INSERT INTO accounts_mm (abc, name)
    SELECT '".$mysqli->real_escape_string($abc)."', '".$mysqli->real_escape_string($name)."' FROM DUAL  
    WHERE NOT EXISTS (
        SELECT abc FROM accounts_mm WHERE abc = '".$mysqli->real_escape_string($abc)."'
    )";

......它有效......但是在没有插入记录的情况下,我总是得到'成功'。

if($mysqli->query($query)){
    echo json_encode(array('added' => 'Success!')); 
} else {
    echo json_encode(array('added' => 'Failure!'));     
}   

如何检查上述查询的成功与否?

进一步尝试:

if(mysqli_affected_rows($mysqli->query($query)) > 0){
    echo json_encode(array('added' => 'Success!')); 
} else {
    echo json_encode(array('added' => 'Failure!'));     
}   

1 个答案:

答案 0 :(得分:3)

查询可能会成功(但不会失败)但不会因WHERE NOT EXISTS而插入。就像SELECT abc FROM accounts_mm WHERE abc = 1不会生成错误但如果没有abc = 1则可能无法返回结果。所以你需要检查affected_rows

使用您使用过的对象:

$mysqli->query($query);

if($mysqli->affected_rows() > 0){
    echo json_encode(array('added' => 'Success!')); 
} else {
    echo json_encode(array('added' => 'Failure!'));     
}   

或者我猜你可以把它们结合起来:

if($mysqli->query($query) && ($mysqli->affected_rows() > 0)){
    echo json_encode(array('added' => 'Success!')); 
} else {
    echo json_encode(array('added' => 'Failure!'));     
}   

请注意,如果$mysqli->query($query);返回false,则查询由于错误而无法执行,但是如果它返回true则执行了查询但是可能没有结果。