[英]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.