【问题标题】:PHP explode string into pieces then insert into mysqlPHP将字符串分解成碎片然后插入mysql
【发布时间】:2011-08-28 21:27:35
【问题描述】:

如何将explode字符串分片然后插入mysql?

我想逐句插入每个单词,然后插入到mysql数据库中。但我不确定$str 的长度是多少,可能是 4 个字,也可以是 10 个字。

那么如何制作一个foreach,将每个单词插入数据库(每个单词在一行中),谢谢。

$str = "This is a test";
$piece = explode(' ',$str);
$num=0;
for(){
...
mysql_query("INSERT INTO test (words) SELECT '".addslashes($piece[$num])."' FROM dual WHERE not exists (SELECT words FROM test WHERE test.words = '".addslashes($piece[$num])."')");
$num++; 
}

【问题讨论】:

  • 如果您的安装支持它,您可能需要使用PDO,然后您可以创建查询并为每次迭代更新您的参数。
  • 我有PDO,但从未研究过。谢谢。

标签: php mysql insert explode


【解决方案1】:

很简单,也不要使用addslashes(),我会使用mysql_escape_string() 来处理与mysql 相关的所有内容。

$str = "This is a test"; 
$pieces = explode(' ', $str);
foreach($pieces as $piece)
    mysql_query('insert into test (words) values (\'' . $piece . '\');');

(当然你可以再次添加更多条件,例如确保单词唯一等)

foreach() 相当容易使用:

foreach($array as $value)

foreach($array as $key => $value)

其中$key$value 每次迭代都会更新。

【讨论】:

    【解决方案2】:
    $str = "This is a test";
    $piece = explode(' ',$str);
    foreach($piece as $substr){
        mysql_query("INSERT INTO test (words) SELECT '".mysql_real_escape_string($substr)."' FROM dual WHERE not exists (SELECT words FROM test WHERE test.words = '".mysql_real_escape_string($substr)."')");
    }
    

    【讨论】:

      【解决方案3】:

      $str = "This is a test";
      
      // make sure there are only letters and spaces in your text (prevents
      // something like "demo," in your database
      $str = preg_replace("/[^a-zA-Z0-9\ ]/", " ",$str);
      
      // explode it
      $words = explode(' ',$str);
      
      // make sure we have unique words
      $words = array_unique($words);
      
      foreach ($words as $word) {
          mysql_query("INSERT INTO test (word) values ('".$word."')";
      }
      

      【讨论】:

        【解决方案4】:

        同样,如果您想减少运行的查询数量(这反过来又会减少脚本运行所需的时间):

        <?php
        $str="This is a test";
        $words=explode(' ',mysql_escape_string($str));
        $query="insert into test (words) values ('".implode("'),('",array_unique($words))."')";
        $result=mysql_query($query);
        ?>
        

        它本质上用'),('替换所有空格,然后将整个内容包装到一个查询中

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-11
          • 1970-01-01
          • 2011-07-05
          相关资源
          最近更新 更多