-5

含まれている PHP ファイルは次のとおりです。

<?php
session_start();
include("../includes/dbcxnfunction.inc");

$billid = $_POST['billid'];
$userid = $_SESSION['userid'];

$query = "IF EXISTS ( SELECT * FROM favoritebills WHERE userid = '$userid' AND billid = '$billid' )
              DELETE FROM favoritebills WHERE userid = '$userid' and billid = '$billid'         
          ELSE
              INSERT INTO favoritebills (userid,billid) VALUES($userid,$billid) ";

$result = mysqli_query(dbcxn('bill'),$query)
              or exit("Couldn't execute query for favorites");

if($result)
    {
    $request = "true";
    }
else 
    {
        $request = "false";
    }

echo $request;

?>

クエリは次のとおりです。

"IF EXISTS ( SELECT * FROM favoritebills WHERE userid = '$userid' AND billid = '$billid' )
          DELETE FROM favoritebills WHERE userid = '$userid' and billid = '$billid'         
      ELSE
          INSERT INTO favoritebills (userid,billid) VALUES($userid,$billid) ";

userid と billid はどちらも整数です。

これは私のネットワークタブです:

ここに画像の説明を入力

私の.jsファイルにはconsole.log(response);

コンソールに「お気に入りのクエリを実行できませんでした」というログが記録されている

4

2 に答える 2

1

IFクエリでステートメントとして使用することはできません。ストアド プロシージャでのみ使用できます。必要なことを行うには、2 つの別個のクエリが必要です。これを試して:

$del_query = "DELETE FROM favoritebills WHERE userid = '$userid' and billid = '$billid'";
$ins_query = "INSERT INTO favoritebills (userid,billid) VALUES($userid,$billid) ";

$res = mysqli_query(dbcxn('bill'),$del_query)
  or die ("Couldn't execute DELETE query: " . dbxcn('bill')->error);
if (dbcxn('bill')->affected_rows == 0) { // The row didn't exist, so add it
  $res = mysqli_query(dbcxn('bill'),$ins_query)
    or die ("Couldn't execute INSERT query: " . dbxcn('bill')->error);
}

$result = "true"; // No need to test for false, since we die above in that case
于 2013-07-23T19:58:33.967 に答える
0

レコードが存在する場合、それらを削除して何も残さないことを認識していますか? 挿入は、レコードが存在しない場合にのみ発生します。

それらを結合しようとせず、2 つのクエリを実行し、どこから削除してから挿入するか

于 2013-07-23T19:58:48.680 に答える