如果数据已经存在则检查MySQL,如果不存在,则检查INSERT。 [PHP + jQuery Ajax]

时间:2015-12-18 12:48:55

标签: javascript php jquery mysql ajax

我在创建将代码值插入MySQL数据库的PHP代码时遇到了麻烦,但前提是它们已经不存在了。

我使用$ .ajax类型POST将数组从javascript发送到PHP文件。

我是否需要额外的' SELECT'查询以检查值是否已存在?

PHP文件(Works,插入值):

<?php
SESSION_START();
include('config.php');
if(isset($_POST['predictedMatches'])&&$_SESSION['userid']){
    $predictedMatches=$_POST['predictedMatches'];
    $userid=$_SESSION['userid'];
}else die("ERROR");
$sql="";
foreach($predictedMatches as $predictedMatch){
    $sql.="INSERT INTO predictions(result,userFK,matchFK,tournamentFK) VALUES('".$predictedMatch['result']."','".$userid."','".$predictedMatch['id']."','".$predictedMatch['tourid']."');";
}
    if($conn->multi_query($sql) === TRUE){
        echo "OK";
    }else{
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
$conn->close();
?>

1 个答案:

答案 0 :(得分:2)

使用ON DUPLICATE KEY UPDATE功能。如果主键存在,它将不会插入。但是你必须更新一些值,所以在你的情况下使用没有索引或索引最少的列()结果)。您的主键必须由三个FK组成:

ALTER TABLE `predictions` ADD PRIMARY KEY( `userFK`, `matchFK`, `tournamentFK`);

PHP-Code,只是SQL语句(我是Java Guy,所以我尽我所能)

$sql.="INSERT INTO predictions (result, userFK, matchFK, tournamentFK) "
."VALUES('".$predictedMatch['result'] ."','".$userid."','"
.$predictedMatch['id']."','".$predictedMatch['tourid']."') "
."ON DUPLICATE KEY UPDATE result = result ;";

要知道是否插入了查询,您必须查看受影响的行数:

  • 1行 - 插入
  • 2行 - 更新

查询后查看$conn->affected_rows

效果

INSERT ... ON DUPLICATE KEY UPDATE明确地比SELECTINSERT快,但它比所需数据集的INSERT慢。更新在数据库中完成,即使它是相同的值。不幸的是,没有 ON DUPLICATE KEY UPDATE INGNORE 。如果你有很多插入,那将导致更新,而不是使用缓存,在数组中查找值并在插入之前与数组进行比较。仅使用ON DUPLICATE KEY UPDATE作为后备。