【问题标题】:Insert multiple rows into mysql (items separated by comma)将多行插入mysql(以逗号分隔的项目)
【发布时间】:2012-02-29 20:29:42
【问题描述】:

我有一个小问题 :) 我在网上搜索但没有找到任何解决方案。

我有这样的值(从 $_GET[] 获得)

标签1,标签2,标签3,标签4

我要做的就是将它插入 MySql(通过 PHP),如下所示:

+---------+-------------+ |编号 |标签 | +---------+-------------+ | 33 |标签1 | | 33 |标签2 | | 33 |标签3 | | 33 |标签4 | +---------+-------------+

我在 Stack Overflow 上找到了很多关于此的文章,但这里最大的问题是我不知道每次我会得到多少个值(我没有找到答案)。

我将不胜感激。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    来自英国的问候:)
    您不能只遍历查询字符串字段并一次向数据库添加一行吗?

    例如

    <?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,这样你就可以看到输出了。

    【讨论】:

    • 啊——你的意思是“tag1,tag2,tag3”是一个连续的字符串?您可以使用“expode”将它们拆分成一个数组
    • 我用了explode,用这段代码我只得到0、1、2、3到Mysql
    • 现在我只将第二个标签放入mysql。
    • 好的,我添加了一个“echo”并将脚本上传到显示的 URL - 您可以看到结果表明它应该工作。如果没有,您能否发布更新后的代码,以便我们查看问题所在? :)
    • 现在它就像一个魅力。我不知道以前出了什么问题,我只知道下次我在英国时应该给你买一两杯啤酒:) 谢谢!
    【解决方案2】:

    您可以使用多个值执行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).");");
    

    【讨论】:

    • 但是你将如何从tag1, tag2, tag3, tag4获得'tag1', 'tag2', 'tag3'???
    • 添加了另一个修订版,所以希望现在一切都清楚了。
    【解决方案3】:

    使用explode()函数拆分字符串

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

    SQL 查询将是

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

    祝你好运!!!

    【讨论】:

    • 由于 Matic 说他不知道在任何给定时间会有多少标签,因此 Matic 需要循环遍历您创建的数组。
    • @user984869 :同意......那么如果标签少怎么办?他会在那里有NULL吗?那么我们将需要表格结构......你的想法是什么?
    【解决方案4】:

    我会将您以逗号分隔的标签转换为数组,然后循环遍历该数组以进行插入。

    $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'");
    
    }
    

    您可以使用准备好的语句来提高效率,但它使这个示例保持简单。

    【讨论】:

      【解决方案5】:

      这将根据您的结果解决

      $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);
      

      【讨论】:

        【解决方案6】:
        $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])");
        }
        

        【讨论】:

        • 勾选获取标签的地方不要加逗号和空格,每次输入后只加逗号。
        • 我删除了逗号后的空格,同样的事情发生了
        • 尝试 var_dump($tagStr) 如果它像 "tag1,tag2,tag3,tag4" 那么爆炸应该可以工作。
        • 仍然没有成功,我尝试的任何东西都得到了所有相同的值或只有一个。
        • 你是什么 $tag 字符串输出
        【解决方案7】:

        试试这个尺寸:(结合许多几乎正确的人的想法)。

        $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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-14
          • 1970-01-01
          • 1970-01-01
          • 2014-04-09
          • 2021-05-29
          • 2017-01-24
          • 1970-01-01
          相关资源
          最近更新 更多