Javascript 在MySQL中保存(使用JS请求)和读取(使用PHP)XML
我正试图将一些xml内容(以纯文本形式接收)保存到我的站点数据库中。我读过关于保存XML内容的文章,有人建议将XML保存在文本字段(数据库)中不是一个好主意,所以我决定在blob中保存。问题是我通过CORS,通过javascript这样做:Javascript 在MySQL中保存(使用JS请求)和读取(使用PHP)XML,javascript,php,mysql,xml,Javascript,Php,Mysql,Xml,我正试图将一些xml内容(以纯文本形式接收)保存到我的站点数据库中。我读过关于保存XML内容的文章,有人建议将XML保存在文本字段(数据库)中不是一个好主意,所以我决定在blob中保存。问题是我通过CORS,通过javascript这样做: var formData = new FormData(); formData.append("name", 'myNewFile'); // THE XML CONTENT var content = '<a id="a"><b id
var formData = new FormData();
formData.append("name", 'myNewFile');
// THE XML CONTENT
var content = '<a id="a"><b id="b">hey!</b></a>';
var blob = new Blob([content], { type: "text/xml"});
formData.append("file", blob);
var request = new XMLHttpRequest();
request.open("POST", url);
request.onreadystatechange = function() {
if(request.readyState == 4 && request.status == 200) {
resultsContainer.innerHTML = (request.responseText );
}
}
request.send(formData);
这似乎是可行的,条目是在数据库中创建的,但我看不到BLOB字段中的内容。所以,我尝试使用PHP从服务器读取它,但我只检索文件字段中的“0”
$sql = "SELECT datetime, name, file FROM ProfileFiles";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Timestamp: " . $row["datetime"]."<br>";
echo "Name: " . $row["name"]. "<br>";
echo "Content: " + $row["file"];
echo "<br>----------<br>";
}
}
else
{
echo "Nothing";
}
$sql=“从ProfileFiles中选择日期时间、名称、文件”;
$result=$conn->query($sql);
如果($result->num_rows>0){
而($row=$result->fetch_assoc()){
回显“时间戳:.”行[“日期时间”]。“
”;
echo“Name:”.$row[“Name”]。“
”;
echo“内容:+$row[“文件”];
回声“
--------------
”;
}
}
其他的
{
呼应“没有”;
}
我错过了什么?提前谢谢!我从未使用过PHP。在
$\u POST['file']
中没有任何内容的原因是您将其作为文件发送。发布的文件位于超全局变量$\u Files
中,而不是$\u POST
中<代码>$\u文件['file']将包含一个数组
array('name' => '...', 'tmp_name' => '...', 'type' => '...', 'size' => '...');
内容将保存到一个临时文件中,其名称存储在$\u FILES['file']['tmp\u name']
你看,你真的误入歧途了。。。您需要做的是将XML数据作为POST变量而不是文件发送。执行此操作时,您可以像尝试过的那样将数据保存到数据库中,但是对于准备好的语句,它将类似于(假设您使用的是mysqli)
$name = $_POST['name'];
$file = $_POST['file'];
$sql = "INSERT INTO ProfileFiles (name, file)
VALUES (?, ?)";
$stmt = $mysqli->stmt_init();
$stmt->prepare($sql);
$stmt->bind_param("ss", $name, $file);
$stmt->execute();
$stmt->bind_result($result);
$stmt->fetch();
使用准备好的语句的要点如下:
如果文件包含”
,则查询中会出现错误。此外,您的代码易受sql注入攻击。您需要在查询中转义字符串
我本人从未使用过mysqli,而且我提供的代码看起来有点笨拙,所以这里有一个替代方案:
$sql = "INSERT INTO ProfileFiles (name, file)
VALUES ('". mysqli_real_escape_string($name)."', '".mysqli_real_escape_string($file) ."')";
不建议将xml保存在blob中,原因与不建议保存在文本字段中的原因相同:xml以结构化形式携带信息,但将其保存在平面字段中根本不反映其结构。存储数据的方式不正确。您没有转义值。准备好的语句会更好。Hi Lorenz!谢谢你的回复,但我不明白你的意思。你有什么建议?将其保存为纯文本?这样做会有问题吗?“你没有逃避值”。从客户端?在JS代码中?关于将XML存储在数据库字段中:您不会遇到任何问题,但它只是数据库的一个平面块。您将无法处理XML文件中包含的数据。您唯一能做的就是从数据库中读取XML文件。嘿,Lorenz!谢谢!但它只保存了我?和?值:(值(?,)必须不带'
$sql = "INSERT INTO ProfileFiles (name, file)
VALUES ('". mysqli_real_escape_string($name)."', '".mysqli_real_escape_string($file) ."')";