Php 在MySQL数据库中插入XML,同时确保它是UTF8且仅为纯文本(无符号-é;等)
我正在学习PHP,或者试图通过搞乱这个小项目来学习PHP 我每周都会收到一份需要放入mysql数据库的XML,下面是一个小样本,它看起来是什么样子(通常每个报价文件有35个孩子)Php 在MySQL数据库中插入XML,同时确保它是UTF8且仅为纯文本(无符号-é;等),php,mysql,xml,Php,Mysql,Xml,我正在学习PHP,或者试图通过搞乱这个小项目来学习PHP 我每周都会收到一份需要放入mysql数据库的XML,下面是一个小样本,它看起来是什么样子(通常每个报价文件有35个孩子) 10073482 随机品牌 Loerm ipsum…100-3000个字符 5191181 29.99 10073482 随机品牌 Loerm ipsum…100-3000个字符 5191181 大的 29.99 我想理想情况下我想: 导入XML并确保其所有Web安全 让它成为UTF-8 去除所有符号,例如 查找
10073482
随机品牌
Loerm ipsum…100-3000个字符
5191181
29.99
10073482
随机品牌
Loerm ipsum…100-3000个字符
5191181
大的
29.99
我想理想情况下我想:
- 导入XML并确保其所有Web安全
- 让它成为UTF-8
- 去除所有符号,例如
- 查找每个产品使用的所有字段
- 用这些信息做一张桌子
- 强制将大量XML放入表中
children()->children()作为$child){
$currentAttrib=$child->getName();
//创建查询以创建mysql表
$tableCreateQuery.=“`currentAttrib`TEXT'”;
}
$tableCreateQuery=rtrim($tableCreateQuery,“,”);
$tableCreateQuery.=”)字符集utf8”;
//创建mysql表
mysql\u查询($tableCreateQuery);
//循环向新的mysql表添加XML
$pCount=0;
foreach($xml->children()作为$child){
$pCount++;
$theColumnsArr=array();
$theColumnsStr=“”;
$theDataArr=array();
$theDataStr=“”;
$i=0;
foreach($child->children()作为$attrib){
$attrName=$attrib->getName();
$theColumnsArr[$i]=$attrName;
$theDataArr[$i]=urlencode(utf8_encode($attrib));
$i++;
}
$k=0;
foreach($columnsar作为$value){
$colname=$theColumnsArr[$k];
$coldata=$theDataArr[$k];
$theColumnsStr.=“`colname`,”;
$theDataStr.=“$coldata',”;
$k++;
}
$thecolumnssstr=rtrim($thecolumnssstr,“,”);
$theDataStr=rtrim($theDataStr,“,”);
$theRow=“插入$name($theColumnsStr)值($theDataStr)”;
mysql_query($theRow)或die(mysql_error());
}
echo$pCount。“添加到数据库的产品”;
}否则{
退出(“打开$filename失败”);
}
mysql_close($con2);
?>
如果要将非utf8数据转换为utf8数据,$utf8\u data=utf8\u encode($data)
应该这样做。我假设您已经尝试更改$theDataArr[$I]=urlencode(utf8_encode($attrib))
到$theDataArr[$i]=utf8\u编码($attrib)代码>?是的,我刚刚使用了utf8\u encode
,但它似乎仍然无法导入很多产品,大多数时候它会返回26000个ish产品。我确实使用了mysql\u查询(“将XML本地填充“$filename”加载到由“;”标识的表$name行中”)
之前导入了全部报价,但我无法首先使用它来处理XML。您是否尝试过打印SQL语句,然后直接在SQL server上执行它?通过phpmyadmin或其他途径?例如,echo$theRow
而不是mysql\u query($theRow)或die(mysql\u error())代码>只是为了让你的查询都正确吗?是的,查询看起来不错,我认为这是一种查询的数据部分存在无效字符的情况,我尝试了htmlentities
,甚至urlencode
,结果都是一样的。
<?xml version="1.0" encoding="iso-8859-1"?>
<Offers>
<Offer>
<ProductName>10073482</ProductName>
<Manufacturer>Random Brand</Manufacturer>
<Description>Loerm ipsum....100-3000characters</Description>
<ModelNumber>5191181</ModelNumber>
<Price>29.99</Price>
</Offer>
<Offer>
<ProductName>10073482</ProductName>
<Manufacturer>Random Brand</Manufacturer>
<Description>Loerm ipsum....100-3000characters</Description>
<ModelNumber>5191181</ModelNumber>
<Size>Large</Size>
<Price>29.99</Price>
</Offer>
</Offers>
<?php
ini_set('display_errors','On');
ini_set('max_execution_time', 300);
// Establish connection to database
$con2 = mysql_connect("localhost","root","root");
if (!$con2) {
die('Could not connect: ' . mysql_error());
}
$selectdb = mysql_select_db("f1", $con2);
if (!$selectdb) {
die('Database not used: ; ' . mysql_error());
}
// Vars
$name = $_GET['name'];
$filename = $name . ".xml";
$tableCreateQuery = "CREATE TABLE $name ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,";
// Load XML
if (file_exists($filename)) {
$xml = simplexml_load_file($filename);
foreach ($xml->children()->children() as $child){
$currentAttrib = $child->getName();
// Create query to create mysql table
$tableCreateQuery .= " `$currentAttrib` TEXT,";
}
$tableCreateQuery = rtrim($tableCreateQuery, ",");
$tableCreateQuery .= ") CHARACTER SET utf8";
// Create mysql table
mysql_query($tableCreateQuery);
// Loop through adding XML to new mysql table
$pCount = 0;
foreach ($xml->children() as $child){
$pCount++;
$theColumnsArr = array();
$theColumnsStr = "";
$theDataArr = array();
$theDataStr = "";
$i = 0;
foreach ($child->children() as $attrib){
$attrName = $attrib->getName();
$theColumnsArr[$i] = $attrName;
$theDataArr[$i] = urlencode(utf8_encode($attrib));
$i++;
}
$k = 0;
foreach ($theColumnsArr as $value) {
$colname = $theColumnsArr[$k];
$coldata = $theDataArr[$k];
$theColumnsStr .= "`$colname`,";
$theDataStr .= "'$coldata',";
$k++;
}
$theColumnsStr = rtrim($theColumnsStr, ",");
$theDataStr = rtrim($theDataStr, ",");
$theRow = "INSERT INTO $name ($theColumnsStr) VALUES ($theDataStr)";
mysql_query($theRow) or die(mysql_error());
}
echo $pCount . " products added to database";
} else {
exit("Failed to open $filename");
}
mysql_close($con2);
?>