如何将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'

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

在此先感谢。

+0

您能否提供表格'WebPage'的结构? – 2013-02-19 13:54:59

+2

请注意,您应该切换到PDO或mysqli,因为标准的PHP mysql_函数现在已被弃用。 – RayViljoen 2013-02-19 13:57:27

+0

什么是'Example Domain'? – Shoe 2013-02-19 13:58:04

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