簡體   English   中英

檢查mysql條目是否退出然后刪除

[英]Check if mysql entry exits then DELETE

我有點想尋找解決方案。

我需要檢查表單中的輸入數據$ coupon(在“ post”操作之后)是否等於行$ Coupon中名為Serial的現有MySQL表中的數據。 如果這兩個條目匹配,我需要刪除表“ Serial”中的一個(刪除自)。 在另一種情況下,我需要顯示一個錯誤,例如echo“您輸入的優惠券號碼無效”。

現在我有以下代碼,但它不執行檢查。

$query4="SELECT EXISTS(SELECT 1 FROM serial WHERE Coupon='$coupon')";
$result = mysql_query($query4);

if($result){
    echo "Bravo!";
}
else{
    "The coupon number you've entered is invalid";
    exit;
}
// Delete data from mysql
$query2="DELETE FROM serial WHERE Coupon = '$coupon'";
$result = mysql_query($query2); 

// if successfully insert data into database, displays message "Successful".
if($result){
echo "Some info";
}
else {
die(mysql_error());
}

非常感謝任何想法!

您已經為自己創建了比賽條件。 優惠券在運行SELECT語句時存在的事實並不意味着在運行delete語句時將存在,尤其是在這是Web應用程序或多線程/多進程的情況下。

DELETE語句從tbl_name中刪除行,並返回已刪除行數的計數。 可以通過調用ROW_COUNT()函數獲得此計數。

無條件運行DELETE,然后使用ROW_COUNT來查看它是否在那里並被刪除或從未在那里。

您實際上可以只執行SELECT 1 FROM serial...

然后:

$result = mysql_query($query4);
if (mysql_num_rows($result)) {

如果它返回一行,則表明它存在。 您還可以將LIMIT 1添加到查詢中以使其更快。


順便說一下,您的代碼容易被注入。 您應該對PDO或mysqli使用正確參數化的查詢。

首先,逐步淘汰mysql_ *功能,否則您將比檢查結果有更大的問題。 您的代碼容易受到SQL注入的攻擊。 請改用PDO或MySQLi。

其次,為什么在第一個查詢中根本不需要EXISTS

這是PDO中的解決方案:

 $query = 'SELECT 1 FROM serial WHERE Coupon = :coupon';
 $stmt = PDO->prepare($query);
 $stmt->bindParam(':coupon', $coupon, DB::PARAM_STR);
 $stmt->execute();
 if ($stmt->rowCount() > 0) {
    //query 2
    $query2 = "DELETE FROM serial WHERE Coupon = :coupon";
    $stmt2 = PDO->prepare($query2);
    $stmt2->bindParam(':coupon', $coupon, DB::PARAM_STR);
    if ($stmt2->execute()) {
       echo 'Success';
    } else {
       echo 'Unable to Delete';
    }
 } else {
    echo 'Selected Coupon Is Invalid'; 
 }

或更簡單地在一個查詢中:

$query = 'DELETE FROM serial WHERE coupon = :coupon';
$stmt = PDO->prepare($query);
$stmt->bindParam(':coupon', $coupon, DB::PARAM_STR);
if ($stmt->execute()) {
  echo 'Success';
} else {
  echo 'failure, invalid coupon';
}

跟進mluebke的回答:

// Delete data from mysql
$query="DELETE FROM serial WHERE Coupon = '$coupon'";
mysql_query($query); 

//Did we delete something?
if (mysql_affected_rows()) {
  echo "Bravo!";
}
else{
    "The coupon number you've entered is invalid";
    exit;
}

http://www.php.net/manual/zh-CN/function.mysql-affected-rows.php http://dev.mysql.com/doc/refman/5.5/zh-CN/information-functions.html#function_row-count

暫無
暫無

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

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