gpt4 book ai didi

javascript - 在 MySQL 中保存(使用 JS 请求)和读取(使用 PHP)XML

转载 作者:行者123 更新时间:2023-11-29 02:55:53 25 4
gpt4 key购买 nike

我正在尝试将一些 xml 内容(我以纯文本形式接收)保存到我网站的数据库中。我阅读了有关保存 XML 内容的文章,有人建议将 XML 保存在文本字段(数据库)中不是一个好主意,因此我决定在 blob 中进行操作。问题是我正在通过 CORS,通过 javascript 这样做:

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);

在服务器上,我将其存储在:

$name = $_POST['name'];
$file = $_POST['file'];

$sql = "INSERT INTO ProfileFiles (name, file)
VALUES ('$name', '$file')";

它似乎有效,条目是在数据库中创建的,但我看不到 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";
}

我错过了什么?提前致谢!我从未使用过 PHP。

最佳答案

您在 $_POST['file'] 中没有得到任何东西的原因是您将它作为文件发送。发布的文件位于超全局变量 $_FILES 而不是 $_POST 中。 $_FILES['file'] 将包含一个数组

array('name' => '...', 'tmp_name' => '...', 'type' => '...', 'size' => '...');

内容将被保存到一个临时文件中,其名称存储在$_FILES['file']['tmp_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 注入(inject)的攻击。您需要转义查询中的字符串。

我自己从来没有用过 mysqli,而且我给出的代码看起来有点笨拙,所以这里有一个替代方案:

$sql = "INSERT INTO ProfileFiles (name, file)
VALUES ('". mysqli_real_escape_string($name)."', '".mysqli_real_escape_string($file) ."')";

关于javascript - 在 MySQL 中保存(使用 JS 请求)和读取(使用 PHP)XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30649608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com