我试图将一些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,但我只是检索&#34; 0&#34;在文件字段中。
$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。
答案 0 :(得分:1)
您在$_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注入。您需要转义查询中的字符串。
我自己从未使用过mysqli,而且我给的代码看起来有点笨拙,所以这里有另一种选择:
$sql = "INSERT INTO ProfileFiles (name, file)
VALUES ('". mysqli_real_escape_string($name)."', '".mysqli_real_escape_string($file) ."')";