我的$关键字为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 );
在我的关键字表中,我只得到“打印”这个词。有人能解释一下为什么会这样吗?
答案 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 );
第一种方法看起来很简单,但会消耗比第二种方法更多的内存