因此,我有一个变量数组,它是从网页中抓取明文数据字符串创建的(使用简单的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行的‘’示例域‘值'1'’附近使用的正确语法
此处输入的整个查询: INSERT INTO WebPage‘示例域’值'1‘
如果需要,我可以提供更多代码,如果我没有很好地解释这一点,请提前道歉;我对此相当陌生。
提前谢谢。
发布于 2013-02-19 22:00:07
您的SQL:
INSERT INTO WebPage 'Example Domain' VALUES '1'无效。也许你的意思是:
INSERT INTO `WebPage` ('Example Domain') VALUES ('1')顺便说一句,如果Example Domain确实是一个列名:您应该在字段名中真正避免空格。
发布于 2013-02-19 22:02:12
这里有很多错误。
首先,您为插入生成的SQL看起来不正确:
INSERT INTO tableName (fields) VALUES (values)你的代码说:
INSERT INTO WebPage 'plainText' VALUES (array)如果要创建一个与网页标题类似的表,则应删除网页。另外,它必须是一个单词(用‘_’之类的东西代替空格)。
其次,您需要创建表。在执行插入之前,您需要正确的CREATE TABLE结构。
第三,您的echo print_r不能为每个字段(列)插入一个值。您需要迭代数组,并为每个键插入一个值。但是在创建表列时,您应该已经这样做了。
发布于 2013-02-19 22:05:38
看起来您正在尝试将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 arrayedit:正如其他人所指出的,mysql_real_escape_string是一个被弃用的函数,因此应该使用其他方法来转义字符。
edit2:serialize也可以用来代替json_encode,尽管我不确定它的优缺点。一种更理想的方法是重新构造数据库表,以将数组的所有内容作为单独的数据片段容纳,尽管这有时可能并不实用。
https://stackoverflow.com/questions/14959156
复制相似问题