PHP爆炸到MYSQL只显示最后一个值

时间:2014-05-29 02:02:05

标签: php mysql

我的$关键字为Design~!~Development~!~Print

$keywordsplit = explode('~!~',$keywords); 

foreach($keywordsplit as $keysplit){

   $sqlkeyword= "INSERT INTO keywords (keyword) VALUES ('" . mysql_real_escape_string($keysplit) . "')";

}

$keywordtest = mysql_query( $sqlkeyword, $conn );

在我的关键字表中,我只得到“打印”这个词。有人能解释一下为什么会这样吗?

4 个答案:

答案 0 :(得分:3)

你必须将查询放在循环中,否则只执行最后一个。

foreach($keywordsplit as $keysplit) {
   $sqlkeyword= "INSERT INTO keywords (keyword) VALUES ('".mysql_real_escape_string($keysplit)."')";
  $keywordtest = mysql_query( $sqlkeyword, $conn );
}

您还可以构建一个sql以一次插入多行。

答案 1 :(得分:2)

您在每次迭代中覆盖$sqlkeyword,因此只存储最后一个“关键字”。您需要在循环内执行语句或编写多插入语句。

答案 2 :(得分:2)

发生的事情是变量被覆盖了。你可以做这样的事情(和建议):

$raw_keyword = 'Design~!~Development~!~Print';
$keywordsplit = explode('~!~',$raw_keyword);
$values = array();
foreach($keywordsplit as $value) {
    $values[] = "('".$value."')";
}

$sqlkeyword = "INSERT INTO keywords (keyword) VALUES ".implode(',', $values);
echo $sqlkeyword; // INSERT INTO keywords (keyword) VALUES ('Design'),('Development'),('Print')

答案 3 :(得分:0)

foreeach中的$ sqlkeyword只返回最后一个值。因为你把你的mysql_query放在foreach之外。 您可以使用此方法为每个foreach关键字运行mysql_query

$keywords = "Design~!~Development~!~Print";
$keywordsplit = explode('~!~',$keywords); 

foreach($keywordsplit as $keysplit) {
    $sqlkeyword = "INSERT INTO keywords (keyword) VALUES ('".mysql_real_escape_string($keysplit)."')"; 
    $keywordtest = mysql_query( $sqlkeyword, $conn );
}

或将此foreach关键字保存为数组的方法

$keywords = "Design~!~Development~!~Print";
$keywordsplit = explode('~!~',$keywords); 
$arraykeyword = array();

foreach($keywordsplit as $keysplit) {
    $arraykeyword[] = "('".mysql_real_escape_string($keysplit)."')";
}
$sqlkeyword = "INSERT INTO keywords (keyword) VALUES " . implode( ',', $arraykeyword); 
$keywordtest = mysql_query( $sqlkeyword, $conn );

第一种方法看起来很简单,但会消耗比第二种方法更多的内存