php - 此代码仅用于插入,我的问题是如何在插入之前防止重复记录

我想显示数据输入已经存在 array

<?php
if(isset($_POST["med_nom"]))
{
 $connect = new PDO("mysql:host=localhost;dbname=dbs", "", "password");
 for($count = 0; $count < count($_POST["med_nom"]); $count++)
 {
  $query = "INSERT INTO medicinetbl (med_dorder, med_id, med_nom, med_qty, med_prc) VALUES (:med_dorder, :med_id, :med_nom, :med_qty, :med_prc)";
  $statement = $connect->prepare($query);
  $statement->execute(
   array(
    ':med_dorder'  => $_POST["med_dorder"][$count],
    ':med_id'  => $_POST["med_id"][$count], 
    ':med_nom'  => $_POST["med_nom"][$count], 
    ':med_qty' => $_POST["med_qty"][$count], 
    ':med_prc'  => $_POST["med_prc"][$count]
   )
  );
 }
 $result = $statement->fetchAll();
 if(isset($result))
 {
  echo 'ok';
 }
}
?>

回答1

这就是我在 table 中检查重复行 ID 的方式:

# Generate random Row ID
$rid = rand(1000, 9999);

# start query (yours will be different as I have a class created for starting 
# connections with PDO; nonetheless, you should still understand what im doing here)
$query_ridcheck = $db->connect->prepare("SELECT * FROM `table` WHERE rid=:rid");
$query_ridcheck->bindValue(':rid', $rid, PDO::PARAM_STR);
$query_ridcheck->execute();

# if it fetches any data back (while searching for the newly created $rid), 
# then generate another random $rid again and check again. This while loop will
# keep going until it DOESN"T fetch any data back (meaning the random $rid has 
# not been taken already).
while($query_ridcheck->fetch(PDO::FETCH_ASSOC)){
    $rid = rand(1000, 9999);
    $query_ridcheck = $db->connect->prepare("SELECT * FROM `table` WHERE rid=:rid");
    $query_ridcheck->bindValue(':rid', $rid, PDO::PARAM_STR);
    $query_ridcheck->execute();
}

本质上,您可以在插入之前检查重复数据,然后选择要执行的操作。我选择重新生成数据并再次检查,直到我得到一个不重复的字符串/整数。

在此检查之后,我继续使用该行 ID 将数据插入到 table 中(因为我现在知道它不会被占用)

或者像@Your_Common_Sense 亲切地指出的那样,您也可以执行相同的功能,而不是重复代码:

# executes at lease once, then checks if the condition 
# is true; If it is, continue looping until it's false.
do{
    $rid = rand(1000, 9999);
    $query_ridcheck = $db->connect->prepare("SELECT * FROM `table` WHERE rid=:rid");
    $query_ridcheck->bindValue(':rid', $rid, PDO::PARAM_STR);
    $query_ridcheck->execute();
}while($query_ridcheck->fetch(PDO::FETCH_ASSOC));

回答2

您应该在您的数据中搜索您不想重复的 values,如果有带有 values 的记录,请不要插入。

相似文章

javascript - Sorting 在另一个排序中

我有一组具有多个属性的数据,我希望它们排序的主要方式是在项目A之后放置项目B,但我不想影响这些项目之外的顺序。数据集(不分先后):记录1记录2记录3(具有项目A属性)记录4记录5(项目A)数据集(按A...

最新文章