2015-02-03 3 views
0

Я в тупик !!MYSQL Подготовлено заявление не ведет

У меня есть подготовленное заявление с переменными в нем ...

DELIMITER $$ 

create procedure select_or_insert(
IN unit VARCHAR(255), 
IN STKEY VARCHAR(255), 
IN mark INT(2)) 
begin 

IF EXISTS (select * from studentmarks where STKEY = STKEY and unitcode = unit) THEN 
    UPDATE studentmarks SET unitmark = mark where unitcode = unit and STKEY = STKEY; 
ELSE 
    INSERT INTO studentmarks (STKEY,unitcode,unitmark) 
VALUES (STKEY,unit,mark); 
END IF; 

end 

Calling как ...

foreach ($_POST as $unit=>$mark){ 
if (!mysqli_query($con,"CALL select_or_insert('$unit','$STKEY','$mark')")) { 
    die('Error: ' . mysqli_error($con)); 

} 
} 

Что должно произойти (или то, что я намеревался происходит) является ... Введите новые записи, если они не существуют, и обновите их, если они это сделают.

Поведение оператора: Он будет создавать новые записи, когда таблица пуста. Он будет обновлять записи при заполнении, но только обновляет существующие записи. Он не создает новые записи при изменении STKEY. Кажется, что переменные работают, поскольку они будут вводить новые записи.

Является ли мой синтаксис правильным? Правильно ли я делаю это? Предоставил ли я достаточную информацию?

Заранее спасибо.

+0

_'Am Я собираюсь сделать правильный путь? _ _ - нет. Установите столбец 'STKEY' как уникальный в вашей таблице, затем примените свое обновление с помощью' INSERT ... ON DUPLICATE KEY ... '([Ссылка] (http://dev.mysql.com/doc/refman/5.0/ о/вставка-на-duplicate.html)). Нет необходимости в хранимой процедуре и только один вызов в базу данных. –

+0

BTW - это: 'где STKEY = STKEY' всегда истинно, поэтому каждая строка будет обновлена, если вы используете свой запрос. Одна сторона должна быть именем столбца. –

+0

Спасибо, Хобо Сапиенс, я изучил этот метод. Моя таблица имеет несколько записей для STKEY. то есть. – ash

ответ

0

спасибо Hobo Sapiens предложение относительно переменной и имя столбца то же самое, оно решено. Я изменил подготовленную переменную STKEY на STUKEY, и все это ведет себя так, как я ожидал.

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