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