MSSQL转储为PHP数组
我有一个巨大的mssql文件转储。我想通过file_get_contents()读取该文件,并根据每行的ID将其全部放到一组数组中。不幸的是,ID在不同的表中被命名为不同的名称。下面的行都是针对一个特定的帖子的(并且是具有相同ID的29个条目中的一个)。在下面的示例中,ID是1234567890 例如: [ID]如下MSSQL转储为PHP数组,php,sql,multidimensional-array,Php,Sql,Multidimensional Array,我有一个巨大的mssql文件转储。我想通过file_get_contents()读取该文件,并根据每行的ID将其全部放到一组数组中。不幸的是,ID在不同的表中被命名为不同的名称。下面的行都是针对一个特定的帖子的(并且是具有相同ID的29个条目中的一个)。在下面的示例中,ID是1234567890 例如: [ID]如下 INSERT [dbo].[sf_CmsContentBase] ([Application], [ID], [MimeType], [StreamingProviderName]
INSERT [dbo].[sf_CmsContentBase] ([Application], [ID], [MimeType], [StreamingProviderName], [ParentID], [Url], [LoweredUrl], [CommentsCount], [ItemInfo], [Creator]) VALUES (N'/News', N'1234567890', N'text/html', NULL, NULL, N'/2012/URL', N'/2012/url', 0, NULL, N'author')
[ContentID]如下
INSERT [dbo].[sf_CmsTaggedContent] ([Application], [ContentID], [TagID], [Owner]) VALUES (N'/News', N'1234567890', N'3434', N'author')
[项目ID]如下
INSERT [dbo].[sf_VrsTxtData] ([Application], [ItemID], [CultureID], [Version], [KeyValue], [DataImpl], [HasDynamicLinks], [TypeCode]) VALUES (N'/', N'1234567890', 101, 1, N'Thumbnail', N'/news/images/thumbnail.jpg', 0, 18)
所以基本上我要做的是首先从每一行中形成一个数组,所以第一行类似于
$sqlLineArray = array(
'Application' => '/News',
'ID' => '1234567890',
'MimeType' => 'text/html',
'StreamingProviderName' => NULL,
'ParentID' => NULL,
'Url' => '/2012/URL',
'LoweredUrl' => '/2012/url',
'CommentsCount' => '0',
'ItemInfo' => NULL,
'Creator' => 'author'
);
然后我将对这些数组中的每一个进行遍历,为ID命名的差异应用一些条件,然后有另一个多维数组,其中ID是键,它有刚刚在中创建的所有关联子数组,因此我将数据链接在一起,稍后我可以为另一个数据库对其进行规范化
有没有一种简单的方法可以在不查询数据库的情况下使用PHP实现这一点?我只有一个数据转储。我想我可以在很多地方爆炸(),但是ID出现的顺序没有押韵或原因,所以我不一定说ID是$sqlLineArray[2]或什么的,因为它并不总是这样
mssql_fetch_array()似乎有点合适,但第一个参数必须是资源,而不仅仅是查询字符串。Update 在重读这个问题之后,我错过了从SQL=>PHP数组开始的重要要求。鉴于所有
INSERT
语句都是标准化的,您必须按以下顺序进行分析:
行
这是一个快速而肮脏的解决方案:
$sql = "INSERT INTO [dbo].[table]";
//Implode keys
$sql .= " ([" . implode("], [", array_keys($sqlLineArray)) . "])";
//Implode values
$sql .= " VALUES ('" . implode("', '", $sqlLineArray) . "') ";
结果
INSERT INTO [dbo].[table] ([Application], [ID], [MimeType], [StreamingProviderName],
[ParentID], [Url], [LoweredUrl], [CommentsCount], [ItemInfo], [Creator]) VALUES ('/News',
'1234567890', 'text/html', '', '', '/2012/URL', '/2012/url', '0', '', 'author')
INSERT INTO [dbo].[table]([Application], [ID], [MimeType], [Url], [LoweredUrl],
[CommentsCount], [Creator]) VALUES (N'/News', 1234567890, N'text/html',
N'/2012/URL', N'/2012/url', 0, N'author')
INSERT INTO [dbo].[table]([Application], [ID], [MimeType], [StreamingProviderName],
[ParentID], [Url], [LoweredUrl], [CommentsCount], [ItemInfo], [Creator]) VALUES
(N'/News', 1234567890, N'text/html', NULL, NULL, N'/2012/URL', N'/2012/url', 0, NULL, N'author')
结果
INSERT INTO [dbo].[table] ([Application], [ID], [MimeType], [StreamingProviderName],
[ParentID], [Url], [LoweredUrl], [CommentsCount], [ItemInfo], [Creator]) VALUES ('/News',
'1234567890', 'text/html', '', '', '/2012/URL', '/2012/url', '0', '', 'author')
INSERT INTO [dbo].[table]([Application], [ID], [MimeType], [Url], [LoweredUrl],
[CommentsCount], [Creator]) VALUES (N'/News', 1234567890, N'text/html',
N'/2012/URL', N'/2012/url', 0, N'author')
INSERT INTO [dbo].[table]([Application], [ID], [MimeType], [StreamingProviderName],
[ParentID], [Url], [LoweredUrl], [CommentsCount], [ItemInfo], [Creator]) VALUES
(N'/News', 1234567890, N'text/html', NULL, NULL, N'/2012/URL', N'/2012/url', 0, NULL, N'author')
结果
INSERT INTO [dbo].[table] ([Application], [ID], [MimeType], [StreamingProviderName],
[ParentID], [Url], [LoweredUrl], [CommentsCount], [ItemInfo], [Creator]) VALUES ('/News',
'1234567890', 'text/html', '', '', '/2012/URL', '/2012/url', '0', '', 'author')
INSERT INTO [dbo].[table]([Application], [ID], [MimeType], [Url], [LoweredUrl],
[CommentsCount], [Creator]) VALUES (N'/News', 1234567890, N'text/html',
N'/2012/URL', N'/2012/url', 0, N'author')
INSERT INTO [dbo].[table]([Application], [ID], [MimeType], [StreamingProviderName],
[ParentID], [Url], [LoweredUrl], [CommentsCount], [ItemInfo], [Creator]) VALUES
(N'/News', 1234567890, N'text/html', NULL, NULL, N'/2012/URL', N'/2012/url', 0, NULL, N'author')
插入到[dbo].[table]([Application]、[ID]、[MimeType]、[StreamingProviderName],
[ParentID]、[Url]、[LowereURL]、[CommentsCount]、[ItemInfo]、[Creator]值
(N'/News',1234567890,N'text/html',NULL,NULL,N'/2012/URL',N'/2012/URL',0,NULL,N'author')我喜欢njks解决方案,但我也提出了自己的可怕解决方案,以防有人感兴趣:
$data = file_get_contents('relevantlinesoriginal.sql');
$lines = explode("\n",$data);
foreach ($lines as $line) {
$noInsert = explode("] (", $line);
$noInsert = array_pop($noInsert);
$separatingNamesAndValues = explode(") VALUES (N'", $noInsert);
$namesString = $separatingNamesAndValues[0];
$valuesString = $separatingNamesAndValues[1];
$names = str_replace(array('[',']'), "", $namesString);
$values = substr_replace($valuesString, "", -2);
$names = explode(', ', $names);
$values = explode(', ', $values);
$finalArray = array_combine($names, $values);
var_dump("<pre>", $finalArray, "</pre>");
}
$data=file\u get\u contents('relevantlinesororiginal.sql');
$lines=分解(“\n”,$data);
foreach($line作为$line){
$noInsert=explode(“]”,$line);
$noInsert=array\u pop($noInsert);
$separatingNamesAndValues=explode(“)值(N'”,$noInsert);
$namesString=$separatingNamesAndValues[0];
$valuesString=$separatingNamesAndValues[1];
$names=str_replace(数组('[',']'),'',$namesString);
$values=substr\U replace($valuesString,“,-2);
$names=分解(“,”,$names);
$values=分解(“,”,$values);
$finalArray=array\u combine($names,$value);
变量转储(“,$finalArray,”);
}