簡體   English   中英

刪除記錄(如果存在),否則插入

[英]Delete the record if its exist , else insert

我有一個單擊喜歡的星星,我想在數據庫中檢查記錄是否存在,它將刪除記錄,如果不存在,它將插入記錄,記錄未插入是什么問題

     <?php
    include "config.php";
    header('Content-Type: application/json');
    $landmarkid = $_GET['landmarkid'];
    $userid = $_GET['userid'];


    try {
        $query = mysqli_query($con,"SELECT * from favourite WHERE userid =$userid AND L_ID = $landmarkid");



        if(mysqli_num_rows($query) > 0)
        {
            $q1 = mysqli_query($con,"DELETE from favourite WHERE userid =$userid AND L_ID = $landmarkid");

            if($q1){
                echo '{"Deleted":"true"}';
            }
            else {
                echo '{"Deleted":"false"}';
            }
       } 
       else {
            $q2 = mysqli_query($con,"INSERT INTO favourite (userid,L_ID) VALUES ( $userid, $landmarkid) ");

            if($q2){
                echo '{"inserted":"true"}';
            }
            else {
                echo '{"inserted":"false"}';
            }
        }

        } catch (Exception $e) {
        echo 'Caught exception: ',  $e->getMessage(), "\n";
    }
?>

嘗試在您的插入語句中添加單引號,然后查看是否可行。 更改此語句;

$q2 = mysqli_query($con,"INSERT INTO favourite (userid,L_ID) VALUES ( $userid, $landmarkid) ");

對此

$q2 = mysqli_query($con,"INSERT INTO favourite (userid,L_ID) VALUES ( '$userid', '$landmarkid') ");

讓我知道是否有幫助,或者您發現問題了。

我在下面重寫了您的代碼。

一些要點:

  • 您的代碼很容易受到SQL注入的影響,因此假設id是一個數字值,我使用(int)強制轉換將輸入變量( $userid$landmarkid )強制為整數。

  • 您的第一個檢查查詢可以返回COUNT值,比返回*更好,然后您可以為if語句$result['numb']檢查特定值。

  • 我已經在SQL中正確轉義了您的php變量,但是您確實應該嘗試為此使用Prepared Statements

  • 我認為您不需要在這里try{} catch {} ,因為您的當前代碼永遠不會拋出異常(據我所知)

  • 在您的delete語句中添加LIMIT ,這樣您就永遠不能刪除超出預期數目的行。 這起到了故障保護的作用,因此您不會無意間刪除整個表。


 <?php
 include "config.php";
 header('Content-Type: application/json');
 $landmarkid = (int)$_GET['landmarkid'];
 $userid = (int)$_GET['userid'];

 try {
    $query = mysqli_query($con,"SELECT COUNT(*) as numb FROM 
             favourite WHERE userid = ".$userid." AND 
             L_ID = ".$landmarkid);
    $result = mysqli_fetch_aray($query);

    if($result['numb'] > 0)
    {
        $q1 = mysqli_query($con,"DELETE FROM favourite 
              WHERE userid = ".$userid." AND L_ID = ".$landmarkid." 
              LIMIT 1");
       print "deleted";
    } 
    else {
        $q2 = mysqli_query($con,"INSERT INTO favourite (userid,L_ID)
              VALUES ( ".$userid", ".$landmarkid.") ");
        print "inserted";
     }
  } 
  catch (Exception $e) {
      echo 'Caught exception: ',  $e->getMessage(), "\n";
  }
  ?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM