我正在尝试使用implode语句将此数组插入到我的数据库中。但我正在努力找到我出错的地方:我基本上希望将以下两个函数转换为返回字符串:
function Titles($link) {
$str = file_get_contents($link);
if( strlen( $str )>0 ) {
preg_match_all( "/\<title\>(.*)\<\/title\>/", $str, $titles );
if (count($titles) > 1) {
return $titles[1];
}
}
return '';
}
function getMetas($link) {
$str1 = file_get_contents($link);
if (strlen($str1)>0) {
preg_match_all( '/<meta.*?name=("|\')description("|\').*?content=("|\')(.*?)("|\')/i', $str1, $description);
if (count($description) > 1) {
return $description[4];
}
}
}
$data = array();
foreach ($links as $link) {
$output = array(
"title" => Titles($link),
"link" => $link,
"description" => getMetas($link),
"keywords" => getKeywords($link)
);
if (empty($output["description"]))
{$output["description"] = getWord($link);
}
$data[] = $output;
}
print_r($data);
mysql_query("INSERT INTO scan (title, url, description, keywords) VALUES ('".implode("'),('",$data)."')");
if (!mysql_query()) {
echo "woops";
}
mysql_close($connect);
答案 0 :(得分:1)
问题是$data
是一个多维数组,所以在你内爆之后,你的查询中仍然有数组而不是字符串。
您可以在implode
之前使用$output
来解决这个问题:
$data[] = implode(',', $output);
除此之外,您应该在原始变量上使用mysql_real_escape_string
,但由于mysql_*
函数已被弃用,您实际上应该切换到mysqli或PDO中的预准备语句。
修改:实际上你需要修改两个内爆:
$data[] = '"' . implode('","', $output) . '"';
...
mysql_query( "INSERT INTO scan (title, url, description, keywords)
VALUES (" . implode('),(',$data) . ")" );
答案 1 :(得分:0)
试试这个
$fields = array_keys($data);
$values = array_values($data);
$formatedValues = array();
foreach($values as $val)
{ $val = "'".addslashes($val)."'";
$formatedValues[] = $val;
}
$table="scan";
$sql = "INSERT INTO ".$table." (";
$sql .= implode(", ",$fields).") ";
$sql .= "VALUES( ";
$sql .= implode(", ",$formatedValues);
$sql .= ")";
mysql_query($sql) or die(mysql_error());