2013-06-27 5 views
0

Вот мой запрос:concate записывает данные дважды

mysql_query ("UPDATE p_candidate SET `med_comt` = CONCAT_WS(`med_comt`,' ','$_POST[med_comt]') where `candidate_id` = '$_POST[candidate_id]'"); 

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

Новые комментарии не разделяются пробелом, а новые комментарии записываются дважды. например, если существующий комментарий - это «это тест», а новый комментарий - «другой!».

новые данные выглядят следующим образом

это является testanother один! Еще один!

что я хочу:

это тест еще один!

Было бы лучше, если бы я мог получить новый комментарий на новой линии, как это:

это тест

еще один!

Благодаря

+0

Пожалуйста, избегайте ввода и ваших запросов: http://xkcd.com/327/ – Halcyon

ответ

4

Вы используете CONCAT_WS, как если это было CONCAT. CONCAT_WS работает по-разному. Ваш первый аргумент должен быть SEPARATOR, а ваши оставшиеся аргументы - это значения, которые разделяются через SEPARATOR.

mysql_query ("UPDATE p_candidate SET `med_comt` = CONCAT_WS(' ', `med_comt`, '$_POST[med_comt]') where `candidate_id` = '$_POST[candidate_id]'"); 

PS: Пожалуйста, дезинфицируйте или подготовьте ваши данные.

+0

Вы действительно должны удалить переменные '$ _POST' из своего ответа и заменить его значением-заполнителем. Подобная вещь заставит вас сгореть огромным образом, если вы используете его в своей нынешней форме. – tadman

+0

Как только он получит инъекцию sql, он будет помнить, что в следующий раз он будет дезинформировать свой вход:] –

1

CONCAT_WS() означает сцепить с сепаратором и особую форму CONCAT(). Параметр первый является разделителем для остальных аргументов.

Попробуйте

mysql_query ("UPDATE p_candidate SET `med_comt` = CONCAT_WS(' ',`med_comt`,' ','$_POST[med_comt]') where `candidate_id` = '$_POST[candidate_id]'"); 

Также пожалуйста не используйте поставляется пользовательские данные непосредственно в SQL запросов без по крайней мере, избежать его перед использованием. например, с помощью mysql_real_escape_string()

Пожалуйста, обратите внимание большое окно с предупреждением на страницах Руководства по PHP для mysql_ * функция, хотя, действительно, вы должны изменить к использованию mysqli_ * функции или PDO, если вообще возможно

+0

Благодарим вас за предложение mysql_real_escape_string() – user2510479

+0

Хорошо отметить функцию эвакуации, но настоятельно необходимо использовать ее в своем ответе на продемонстрировать это. – tadman