Php 将列值复制到同一表中的另一列

Php 将列值复制到同一表中的另一列,php,mysql,copy,Php,Mysql,Copy,我正在尝试将标题列复制到数据库中的关键字列,因此关键字将从标题中自动插入 例如,我想在每个单词前加逗号“,” " It's my first program " 它会变成 " It's, my, first, program, " 这就是我写的代码 <?php // $id =mysql_insert_id; $select_posts = mysql_query("SELECT * FROM `posts`"); while($row = mysql_fetc

我正在尝试将标题列复制到数据库中的关键字列,因此关键字将从标题中自动插入

例如,我想在每个单词前加逗号“,”

" It's my first program "   
它会变成

" It's, my, first, program, "
这就是我写的代码

<?php

  // $id =mysql_insert_id;
  $select_posts = mysql_query("SELECT * FROM `posts`");

  while($row = mysql_fetch_array($select_posts)){
        $id  = $row['post_id'];
        $text =  $row['post_title'];  

       $delim = ' \n\t,.!?:;';
       $tok = strtok($text, $delim);


    while ( $tok !== false){
          echo $tok1 = $tok.',';
          mysql_query("UPDATE `posts` SET  `post_keywords` =  '$tok1' WHERE `post_id` = $id  ");
          $tok = strtok($delim);
        }   
}

?>    

只需一个查询即可:

UPDATE `posts` SET post_keywords = REPLACE(post_title, ' ', ',');
计算值:

... SET post_keywords = CONCAT(post_keywords, '$tok1')

请注意,您很容易受到攻击。仅仅因为$tok1值来自数据库并不意味着在查询中重用是安全的…

我认为您需要将更新查询移出内部while循环,并对
$tok1
变量使用串联。此外,我不确定您是否需要此值:
$tok=strtok($delim)在内部while循环中。我以前尝试过移动它们,但没有成功,谢谢。这是一个测试文件,用于确保代码正常工作,将使用tmlenties(strip_标记(mysql_real_escape_string())函数内部。错误。sql转义是您最后要做的事情。如果转义后损坏字符串,则可能会撤消转义。您不应该使用mysql_*()函数。切换到PDO和占位符,然后你就不必再担心转义了。你的代码工作了,但它将所有列值插入到了一起。那么,你还期望什么呢?你在查询中使用了
post_关键字
,所以我在这里也使用了它。如果每个$tok1都属于一个单独的列,那么你的sampl电子代码是无用的。。。