2014-02-20 5 views
0

Я пытаюсь вставить несколько разных слов в базу данных, если они еще не находятся в базе данных. Я получаю текст из текстового поля, где пользователь вводит несколько категорий. Я хочу разделить текст, передаваемый из этого текстового поля запятой, и вставить его отдельно в базу данных, если он еще не находится в нем. В настоящее время ничего не вводится в базу данных. Заранее спасибо за вашу помощь!PHP/MySQL вставляет строку в базу данных

Вот мой код, чтобы разделить данные TextField и вставить в базу данных:

$category = trim($_POST['category']); 

$cat2 = explode(',', $category); 
foreach ($cat2 as $new_interest) 
{ 
$insert_user_interests = sprintf("INSERT INTO interests IF NOT EXISTS name = '". $new_interest . "'" . 
               "(name) " . 
          "VALUES ('%s');", 
          mysql_real_escape_string($new_interest)); 
mysql_query($insert_user_interests); 
} 
+1

Использовать подготовленные/параметризованные запросы с PDO или аналогичными. В противном случае вы можете быть уязвимы для инъекционных атак в определенных условиях. И вы даже не избегаете '$ new_intererst'. – Brad

+0

Что значит, я не убегаю '$ new_interest'? Это не ускользает - 'mysql_real_escape_string ($ new_interest)'? – nviens

+0

Это, но какая польза для вас, если вы конкатенируете его, не убегая? 'IF NOT EXISTS name = '". $ New_interest. "'" ' – Brad

ответ

0

Это ваш insert заявление:

INSERT INTO interests IF NOT EXISTS name = '". $new_interest . "'" . 
              "(name) " . 
         "VALUES ('%s') 

Насколько мне известно, это не действительный insert синтаксис. (Документация here.) Я думаю, вы сбиваете с толку синтаксис create table. Вместо этого используйте ignore и что-то вроде:

INSERT IGNORE INTO interests(name) VALUES(". $new_interest . "')" 

EDIT:

Правильно, если вы не хотите, чтобы вставить дубликаты, а затем создать уникальный индекс name:

create index unique interests_name on interests(name); 

Тогда выше запрос будет делать то, что вы хотите.

+0

И это будет проверьте, существует ли это имя, и если он делает это, он не будет вставлять его? – nviens

+0

Это не сработало ... Должен ли я просто искать базу данных для значения, и если результат меньше 1, вставьте его, если нет, то нет? Или есть более простой способ, как тот, который вы предложили? – nviens

+0

@ пользователь3272438. , , Как это не сработало? Если у вас есть уникальный индекс в 'name', то дублирующиеся имена не могут быть вставлены в таблицу. –

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