Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在MySQL中保存(使用JS请求)和读取(使用PHP)XML_Javascript_Php_Mysql_Xml - Fatal编程技术网

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

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

我正试图将一些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);
这似乎是可行的,条目是在数据库中创建的,但我看不到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) ."')";