2

所以我有一个从网页中抓取纯文本数据字符串创建的变量数组(使用简单的 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 行的 ''Example Domain' VALUES '1'' 附近使用正确的语法

此处输入的整个查询:INSERT INTO WebPage 'Example Domain' VALUES '1'

如果需要,我可以提供更多代码,如果我没有很好地解释这一点,请提前道歉;我对此很陌生。

提前致谢。

4

3 回答 3

1

你的 SQL:

INSERT INTO WebPage 'Example Domain' VALUES '1'

无效。也许你的意思是:

INSERT INTO `WebPage` ('Example Domain') VALUES ('1')

附带说明一下, ifExample Domain确实是列名:您应该真正避免字段名称中的空格。

于 2013-02-19T14:00:07.103 回答
0

这里有很多错误。

首先,您为插入生成的 SQL 看起来不正确:

INSERT INTO tableName (fields) VALUES (values)

你的代码说:

INSERT INTO WebPage 'plainText' VALUES (array)

如果要创建一个名称与网页标题类似的表格,则应删除网页。另外,它必须是一个单词(用“_”之类的东西替换空格)。

其次,您需要创建表。在进行插入之前,您需要正确的 CREATE TABLE 结构。

第三,您的 echo print_r 不适用于为每个字段(列)插入一个值。您需要迭代数组并为每个键插入一个值。但是您应该已经为创建表列执行了此操作。

于 2013-02-19T14:02:12.170 回答
0

看起来好像您正在尝试将输出合并到print_r查询中。这是不可能的,因为print_r将数据从数组输出到页面的函数也是如此。

为了将数组的内容存储在数据库中,您可以使用json_encode将数组转换为字符串。然后在检索它时使用 json_decode ,以便将其更改回 php 数组。

例如

$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虽然我不确定相对的优点/缺点。一种更理想的方法是重组数据库表,以将数组的所有内容作为单独的数据来容纳,尽管这有时可能不切实际。

于 2013-02-19T14:05:38.483 回答