如果特定列中不存在值,则将数据插入数据库

时间:2019-05-15 12:51:35

标签: php mysql

我已经尝试过对此question进行一些回答,但似乎无法解决我的特定问题。

我想插入数据,但前提是flight_number不存在。我该怎么办?

$sql = mysqli_query($con,
  "INSERT INTO space (`flight_number`, `mission_name`, `core_serial`, `payload_id`)
  VALUES ('".$flight_number."', '".$mission_name."', '".$core_serial."', '".$payload_id."')"
);

2 个答案:

答案 0 :(得分:1)

Rob因为您说flight_number是唯一的,所以可以使用INSERT IGNORE

<?php


    $sql = "INSERT IGNORE INTO space (`flight_number`, `mission_name`, `core_serial`, `payload_id`) VALUES (?,?,?,?)";

    $stmt = $con->prepare($sql);
    $stmt->bind_param('isss',$flight_number,$mission_name,$core_serial,$payload_id);
    if($stmt->execute()){

        echo 'data inserted';
        // INSERT YOUR DATA
    }else{

        echo $con->error;
    }

?>

或者您可以从数据库中选择与所提供的航班号相等的任何行,然后如果没有得到结果,则将其插入。

$sql = "SELECT mission_name WHERE flight_number = ? ";
    $stmt = $con->prepare($sql);
    $stmt->bind_param('i',$flight_number);
    if(mysqli_num_rows($stmt) === 0){


        // INSERT YOUR DATA
    }

答案 1 :(得分:-1)

唯一的航班号索引可以解决问题。

CREATE UNIQUE INDEX flight_number_index
ON space (flight_number); 

如果要用新行替换现有行,请使用以下命令:

$sql = mysqli_query($con,
  "REPLACE INTO space (`flight_number`, `mission_name`, `core_serial`, `payload_id`)
  VALUES ('".$flight_number."', '".$mission_name."', '".$core_serial."', '".$payload_id."')"
);

请注意,我只是复制了您的代码,然后将INSERT更改为REPLACE以使其易于理解。请请不要在生产中使用此代码,因为它易于注入。

如果您不想替换现有行,请运行插入并检查错误。如果存在与索引相关的错误,则该行已经存在。

免责声明:我没有测试过任何此代码,因此可能会有错别字。