如何将PHP变量数组发送到MySQL数据库?
所以我有一个从网页中抓取纯文本数据字符串(使用简单的HTML DOM解析器类)创建的变量数组。该变量的格式使其更加简洁和有用。如何将PHP变量数组发送到MySQL数据库?
我现在希望将这些数据导出到一个MySQL表中,其中表名是网页标题(分开刮取),数据输入是一个数组,其中从网页中提取的每个单词都是单独的数据记录。
这里是我的代码(其中$修剪是从用户输入的网页刮数据格式的变量字符串):
$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'示例域'VALUES'1'
如果需要,我可以提供更多的代码,如果我没有很好地解释这一点,可以提前抱歉;我对此很新。
在此先感谢。
你的SQL:
INSERT INTO WebPage 'Example Domain' VALUES '1'
无效。也许你的意思是:
INSERT INTO `WebPage` ('Example Domain') VALUES ('1')
在一个侧面说明,如果Example Domain
确实是一个列名:你应该避免在外地的名字空间。
这里有很多错误。
首先,你产生的插入SQL看起来不正确:
INSERT INTO tableName (fields) VALUES (values)
您的代码表示:
INSERT INTO WebPage 'plainText' VALUES (array)
您应该删除页面,如果你想创建一个名为像表网页标题。另外,它必须是单个单词(用'_'之类的东西替换空的空格)。
其次,您需要创建表格。在插入之前,您需要适当的CREATE TABLE结构。
第三,你的echo print_r不能用于插入每个字段(列)的值。您需要迭代数组,并为每个键插入一个值。但是你应该已经完成了创建表格列的工作。
看起来好像您正试图将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
,虽然我不确定相对的优点/缺点。更理想的方法是重构数据库表,以将数组的所有内容作为单独的数据部分容纳,尽管这可能不实际。
您能否提供表格'WebPage'的结构? – 2013-02-19 13:54:59
请注意,您应该切换到PDO或mysqli,因为标准的PHP mysql_函数现在已被弃用。 – RayViljoen 2013-02-19 13:57:27
什么是'Example Domain'? – Shoe 2013-02-19 13:58:04