使用 MySQL LOAD_FILE() 将 XML 添加到列中


Adding XML to a column with MySQL LOAD_FILE()

我想用MySQL将xml文件加载到表列中。如何使用 INSERT 语句而不是 UPDATE 语句执行此操作?

此代码执行 INSERT 以创建新行,获取最后一个插入行的 id,然后尝试执行更新以加载 xml 文件。 但它不会使用 xml 信息更新行。

我想知道要修复什么才能将 xml 放在数据库列中。 我还想简化代码并在一个 INSERT 语句中执行LOAD_FILE。

MySQL 数据库表结构

Field         Datatype       Attributes            Extra
userid        INT(6)         unsigned              auto_increment
user_events   LONGTEXT

用于添加 xml 文件的 PHP 代码

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$con = mysql_connect("hostname","adminuser","adminpassword");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("test_db", $con);
$qinsert = "INSERT INTO load_xml (`user_events`) VALUES ('user events')";
$result_insert = mysql_query($qinsert);
$qtext = "SELECT * FROM load_xml";
$result = mysql_query($qtext);
$numrows = mysql_num_rows ( $result );
while ($row = mysql_fetch_row($result)) {
    echo 'user id '.$row[0].' user_events '.$row[1].'<br/>';
}
$insert_id = "SELECT LAST_INSERT_ID()";
$rin_id = mysql_query($insert_id);
$row = mysql_fetch_row($rin_id);
$userid = $row[0];
echo 'last added id '.$userid.'<br/>';
$update_xml = "UPDATE load_xml SET user_events=LOAD_FILE('my_events.xml') WHERE userid='$userid'";
$result_update = mysql_query($update_xml);
$qtext = "SELECT * FROM load_xml";
$result = mysql_query($qtext);
$numrows = mysql_num_rows ( $result );
echo $numrows.'<br/>';
while ($row = mysql_fetch_row($result)) {
    echo 'user_id '.$row[0].' user_events '.$row[1].'<br/>';
}
mysql_close($con);
?>

只需在原始插入中添加文件即可。文件路径是服务器上文件的路径。用于连接的 mysql 用户必须具有文件权限。它必须是完整路径。在窗口上,您需要将反斜杠替换为正斜杠 -

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$con = mysql_connect("hostname","adminuser","adminpassword");
if (!$con) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("test_db", $con);
$qinsert = "INSERT INTO load_xml (`user_events`) VALUES (LOAD_FILE('/full/path/to/my_events.xml'))";
$result_insert = mysql_query($qinsert);
$userid = mysql_insert_id();
echo 'last added id '.$userid.'<br/>';
$qtext = "SELECT * FROM load_xml";
$result = mysql_query($qtext);
$numrows = mysql_num_rows ( $result );
while ($row = mysql_fetch_row($result)) {
    echo 'user id '.$row[0].' user_events '.$row[1].'<br/>';
}
mysql_close($con);
?>

更新 - 这是使用 PDO 准备语句和 file_get_contents() 的另一个版本 -

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$db = new PDO('mysql:dbname=test_db;host=hostname', 'adminuser', 'adminpassword');
$qinsert = "INSERT INTO load_xml (`user_events`) VALUES (?)";
$stmt = $db->prepare($qinsert);
$stmt->execute(array(file_get_contents('my_events.xml')));
?>