Вставить несколько строк в MySQL (элементы, разделенные запятой)

У меня небольшая проблема:) Я искал в Интернете, но не нашел никаких решений.

У меня есть значение, как это (получил от $ _GET [])

tag1, tag2, tag3, tag4

и все, что я хочу сделать, это вставить его в MySql (через PHP) следующим образом:

+ --------- + ------------- +
| id | тег |
+---------+-------------+
|      33 |        tag1 |
|      33 |        tag2 |
|      33 |        tag3 |
|      33 |        tag4 |
+---------+-------------+

Я нашел много статей на эту тему о переполнении стека, но самая большая проблема здесь в том, что я не знаю, сколько значений я получу каждый раз (я не нашел этот ответ).

Я буду признателен за любую помощь, которую я получу.

7 ответов

Решение

Привет привет из Великобритании:)
Разве вы не можете просто пройтись по полям строки запроса и добавить по одной строке в базу данных за раз?

например

<?php

$id = 33;
$value_list = 'tag1,tag2,tag3,tag4';
$values = explode(',', $value_list);
foreach ($values as $value)
{
    $sql = "INSERT INTO table (id, value) VALUES ($id, '$value');";
    //.. execute SQL now
    echo '<p>' . $sql . '</p>';
}

?>

Я загрузил это на http://cyba.co/test.php чтобы вы могли увидеть результат.

Вы можете сделать INSERT INTO с несколькими значениями:

INSERT INTO table (tag) VALUES ('tag1', 'tag2', 'tag3');

Убедитесь, что вы правильно экранировали свой ввод (если пользователь предоставил), чтобы предотвратить внедрение SQL. Ты можешь использовать mysql_escape_string() за это.

Изменить: Чтобы получить эти значения, вы можете сделать:

$values = explode(",", $_GET['your_param']);
foreach($values as $idx => $val) {
  $values[$idx] = mysql_real_escape_string(trim($val));
}

mysql_query("INSERT INTO table (tag) VALUES (".implode(",", $values).");");
$id=33;

$tag=$_GET['tag'];
$tag_Split= explode(",", $tag);

$cnt=count($tag_Split);

for($i=0;$i<$cnt;$i++)
{
mysql_query("insert into tag_table(id,tag) 
values ($id, $tag_Split[$i])");
}

Я бы преобразовал ваши разделенные запятыми теги в массив, а затем перебрал массив, чтобы выполнить вставку.

$data_array=explode(",",$tag); // converts tags to an array based on the comma

// loop through each item in the array
foreach($data_array as $one_tag){

// Get rid of the space you have in your tag string
$one_tag=trim($one_tag);

// Do whatever sanitization you need to do to your data, for example...
$one_tag=mysql_real_escape_string($one_tag);

// Insert into the database
mysql_query("INSERT INTO table SET tag='$one_tag'");

}

Вы можете сделать это более эффективным, используя Подготовленные Заявления, но это сохранило этот пример простым.

Использование explode() функция для разделения строки

$tag  = "tag1, tag2, tag3";
$pieces = explode(", ", $tag);

SQL-запрос будет

INSERT INTO myTable VALUES ($pieces[0],$pieces[1],$pieces[2]);

Удачи!!!

Это будет работать в соответствии с вашим результатом

$tagData = array();
$tagList  = explode(",","tag1,tag2,tag3,tag4");
foreach ($tagList as $key=>$value) {
    $tagData[] = '("' . $key . '", "' . $tagList[$key] . '")';
 }
$query = 'INSERT INTO tags (id,tag) VALUES' . implode(',', $tagData);
echo $query;die;
mysql_query($query);

Попробуйте это по размеру: (объединяя идеи множества людей, которые почти все поняли).

$values =  array(
                    33=>'tag1'),
                    33=>'tag2'),
                    33=>'tag3'),
                );

$sql = "INSERT INTO table (id, value) VALUES ";
$count=0;
foreach ($values as $id=> $value)
{
    if ($count++ > 0)
        $sql .= ',';
    $sql .= "($id, '$value')";
}
$query = mysql_query($sql, $db);
Другие вопросы по тегам