所以我有一个通过从网页上抓取明文数据字符串而创建的变量数组(使用Simple HTML DOM Parser类)。该变量的格式使其更简洁和有用。
我现在希望将此数据导出到MySQL表中,其中表名是网页标题(单独抓取),数据输入是数组,其中从网页提取的每个单词都是单独的数据记录。
这是我的代码(其中$ trimmed是从用户输入网页上抓取的格式化变量数据字符串):
$trimmed->plaintext=trim($trimmed->plaintext);
$array = (explode(" ", $trimmed->plaintext));
$printarray = print_r ($array);
mysql_select_db("test", $connect) or die ('Could not find database.');
$sql = "CREATE TABLE '$title'";
$myquery = sprintf("INSERT INTO WebPage '%s'
VALUES '%s'",
mysql_real_escape_string($title->plaintext),
mysql_real_escape_string($printarray));
$result = mysql_query($myquery);
if (!$result) {
$message = '<br /><br /><br /> Invalid query: ' . mysql_error() . "\n";
$message .= '<br /><br /> Whole query entered here: ' . $myquery;
die($message);
}
尝试此操作时收到错误:
查询无效:SQL语法中存在错误;检查与MySQL服务器版本对应的手册,以便在第1行的“示例域”VALUES'1'附近使用正确的语法
在此输入的整个查询:INSERT INTO WebPage'Example Domain'VALUES'1'
如果需要,我可以提供更多代码,如果我没有很好地解释,我会提前抱歉;我对此很陌生。
提前致谢。
答案 0 :(得分:1)
你的SQL:
INSERT INTO WebPage 'Example Domain' VALUES '1'
无效。也许你的意思是:
INSERT INTO `WebPage` ('Example Domain') VALUES ('1')
另外,如果Example Domain
确实是列名:你应该在字段名称中避免使用空格。
答案 1 :(得分:0)
这里有很多错误。
首先,您为插入生成的SQL看起来不正确:
INSERT INTO tableName (fields) VALUES (values)
您的代码说:
INSERT INTO WebPage 'plainText' VALUES (array)
如果要创建名称类似于网页标题的表,则应删除网页。另外,它必须是一个单词(用'_'代替空格)。
其次,您需要创建表。在执行插入之前,您需要适当的CREATE TABLE结构。
第三,echo print_r不适用于为每个字段(列)插入值。您需要迭代数组并为每个键插入一个值。但是你应该已经为创建表格列做了这个。
答案 2 :(得分:0)
看起来好像是在尝试将print_r
的输出合并到查询中。这是不可能的,因为print_r
是一个将数据从数组输出到页面的函数。
为了在数据库中存储数组的内容,您可以使用json_encode
将数组转换为字符串。然后在检索时使用json_decode,将其更改回php数组。
E.g。
$myquery = sprintf("INSERT INTO `WebPage` ('%s')
VALUES ('%s')",
json_encode($title->plaintext),
json_encode($array)); //not $printarray as that is not an actual array
编辑:正如其他人所说,mysql_real_escape_string
是一个不推荐使用的函数,因此应该使用其他方法来转义字符。
edit2:serialize
也可以用来代替json_encode
,虽然我不确定相对的优点/缺点。一种更理想的方法是重构数据库表以将数组的所有内容作为单独的数据容纳,尽管这有时可能不实用。