【问题标题】:Can't save xml file content in mysql with fopen/fwrite/fclose (php) [closed]无法使用 fopen/fwrite/fclose (php) 在 mysql 中保存 xml 文件内容 [关闭]
【发布时间】:2016-02-26 02:01:01
【问题描述】:

所以我正在使用 fopen/fwrite/fclose 在 php 中编写一个 XML 文件,然后尝试将该信息保存到 MySQL 数据库 BLOB 字段中;但是,我遇到了一个问题,在将信息保存到 MySQL 之后,所有文件包含的是 "Resource id #33" 并且没有我试图保存的信息。

$blahXMLFile = fopen($_POST['scenBlahNewName'].".xml","wb");
fwrite($blahXMLFile, "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>");
fwrite($blahXMLFile, "<Blah>");
fwrite($blahXMLFile, "<Name>");
fwrite($blahXMLFile, $_POST['scenBlahNewName']);
fwrite($blahXMLFile, "</Name>");
fwrite($blahXMLFile, "</Blah>");
fclose($blahXMLFile);

$sql = "INSERT INTO blah (xmlFile) 
                      VALUES ('$blahXMLFile');";

if($conn->query($sql) === TRUE) {
    } else { echo "<script>alert('Error: " . $sql . "<br>" . $conn->error . "');</script>";
        echo "Error: " . $sql . "<br>" . $conn->error;
    } //end else

然后我获取 $blahXMLFile php 变量并尝试将其保存在我的 MYSQL 数据库的 BLOB 字段和“Resource id #33 " 就是文件中的全部内容。如果我使用 javascript 来提醒 php 变量,情况也是如此。

我错过了什么?

编辑:尝试根据评论在此处正确使用 fread:

$blahXMLResource = fopen($_POST['scenBlahNewName'].".xml","w");
$blahXMLFile = fread($blahXMLResource, filesize($_POST['scenBlahNewName'].".xml")); 

因为这根本不再保存文件。

【问题讨论】:

  • 从什么时候开始使用 fwrite 写入数据库?
  • 我并没有使用 fwrite 来实际将内容保存在数据库中,只是为了写入文件;我使用 sql 查询,但我想弄清楚的是如何准确地保存正确的信息,因为没有任何内容被保存,只是 Resource id #33。
  • 确保在fopen() 之后检查错误,并对故障进行适当的诊断。确保正确清理$_POST['scenBlahNewName'] 中的用户输入。添加中间诊断打印以确保您确实知道数据正在写入哪个文件。
  • 什么是wb模式?你想在哪里写信给db?听起来您正在尝试编写 fopens 资源。使用fread 阅读内容。 php.net/manual/en/function.fread.php
  • wb 和 w 一样;如帖子中所述,它是一个 blob 字段;我要写的是 fwrites 中的所有内容,但由于某种我不知道的原因,资源 ID 是最终实际写入的内容。

标签: php mysql xml file blob


【解决方案1】:

好的,我明白了;根据@chris85 的建议,我用file_put_contents 替换了我的fopen/fwrite/fclose(我使用的是file_get_contents,但这是每次都追加而不是覆盖文件)。

$blahXMLFile = $_POST['scenBlahNewName'].".xml";

$blahXMLFileContent = "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<Blah xmlns='uri:/mil/tatrc/physiology/datamodel' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation=''>   
    <Name>".$_POST['scenBlahNewName']."</Name>
</Blah>";

file_put_contents($blahXMLFile, $blahXMLFileContent);

echo "<script>alert('".addslashes($blahXMLFileContent)."');</script>";

$blahXMLFileContent 是我最终放入 MySQL 数据库的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-21
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 2011-09-18
    相关资源
    最近更新 更多