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

标签 javascript php jquery mysql ajax

我在创建将值插入 MySQL 数据库的 PHP 代码时遇到问题,但前提是这些值尚不存在。

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

我是否需要额外的“SELECT”查询来检查值是否已存在?

PHP 文件(有效,插入值):

<?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();
?>

最佳答案

使用重复 key 更新功能。如果主键存在,则不会插入。但是您必须更新一些值,因此请使用没有索引或最少索引的列(在您的情况下可能会导致结果)。您的主键必须由三个 FK 组成:

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

PHP代码,只是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 IGNORE。如果您有大量插入,这将导致更新,那么最好使用缓存,在数组中查找值并在插入之前与数组进行比较。仅使用ON DUPLICATE KEY UPDATE作为后备。

关于javascript - 检查MySQL数据是否已存在,如果不存在则INSERT。 [PHP+jQuery Ajax],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34356091/

相关文章:

javascript - jQuery 获取属性

javascript - 将 php regex 转换为 javascript 排除前 150 个字符

php - 更新 mockery 的 andReturn

jquery - 使用 jQuery 修改 JSON 对象

javascript - 使用 jQuery/Perl/Mechanize 处理不同单引号 (') 和 (') 的最佳方法是什么?

Javascript 替换并更改变量中的字符串

javascript - Node/Javascript 仅发送更改的值

php - 如何手动使用 composer, artisan ...(Laravel) php 命令

PHP DateTime 对象提前到该月最近的 17 号

javascript - 在 .php 页面的脚本中初始化一个变量,而不是在 .js 文件中获取它