2013-07-23 9 views
-5

Вот содержащий PHP-файл:Что не так в этой инструкции SQL?

<?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) "; 

Идента и billid являются целыми числами.

Это моя вкладка Сеть:

enter image description here

В моих .js файл У меня есть console.log(response);

Консоль ведения журнала «Не удалось выполнить запрос для избранных»

+1

Почему это так? – Parado

+2

Я все время вижу этот тип вопроса, вы должны прочитать [обычную отладку базы данных для PHP и MySQL] (http://jason.pureconcepts.net/2013/04/common-debugging-php-mysql/). –

+7

Это не запрос, это утверждение. Он может использоваться только как часть хранимой процедуры. – Barmar

ответ

1

Вы можете 't использовать IF как инструкцию в запросе, ее можно использовать только в хранимой процедуре. Чтобы делать то, что вам нужно, вам нужны два отдельных запроса. Попробуйте следующее:

$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 
+0

Возможно, лучше использовать подготовленные заявления –

+1

Да, мне просто не хотелось делать много перезаписи. – Barmar

+0

справедливое замечание ... –

0

Вы понимаете, что если записи существуют, вы их устраняете, не оставляя ничего? Вставка происходит только в том случае, если записи не существуют.

не пытаются объединить их, запустить 2 запросы, Удалить из где затем Вставьте

Смежные вопросы