2013-04-08 4 views
2

Я пытаюсь использовать IF EXISTS в MySQL, но я постоянно получаю ошибки синтаксиса и я исследовал для правильного синтаксиса, но все Isnt работы ...mysql if exists дает ошибку неправильный синтаксис?

Что мне нужно, это: Если запрос существует, то ОБНОВЛЕНИЕ еще ВСТАВИТЬ новое. ..

$queryString = "IF EXISTS (SELECT * FROM $ONCALL_TABLE WHERE uid='$contextUser' AND submitid='$submitid' AND submitstatus=3) THEN UPDATE $ONCALL_TABLE SET uid='$contextUser', start_time='$onStr', end_time='$offStr', amount='$amount' ELSE INSERT INTO $ONCALL_TABLE (uid, start_time, end_time, amount) VALUES ('$contextUser','$onStr', '$offStr', '$amount') END IF"; 

сообщение об ошибке: Невозможно выполнить запрос: у вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с IF EXISTS (SELECT * FROM timesheet_oncall WHERE uid = 'admin' AND submitid = '136545' по строке 1

+0

Вы [escaped] (http://bobby-tables.com/php) '$ contextUser' и другие переменные, введенные в ваш SQL, правильно? Построение запросов без использования заполнителей - это рецепт катастрофы. – tadman

ответ

2

REPLACE INTO - это то, что вам нужно. http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет то же значение, что и новая строка для первичного ключа или уникального индекса, старая строка удаляется перед вставкой новой строки .

В вашем случае

REPLACE INTO 
$ONCALL_TABLE (uid, start_time, end_time, amount) 
VALUES ('$contextUser','$onStr', '$offStr', '$amount') 
WHERE uid='$contextUser'; 

Предполагая uid является PRIMARY KEY или UNIQUE KEY

ПРИМЕЧАНИЕ: Поскольку код в вашем вопросе содержит недостатки инъекций SQL я рекомендовал бы вам прочитать эту статью. http://php.net/manual/en/security.database.sql-injection.php

+0

если есть (выберите ...) заменить на? – rubberchicken

+0

спасибо! очень полезно – rubberchicken

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