Php 使用MySQL LOAD_FILE()向列添加XML

Php 使用MySQL LOAD_FILE()向列添加XML,php,mysql,Php,Mysql,我想用MySQL将xml文件加载到表列中。如何使用INSERT语句而不是UPDATE语句来执行此操作 这段代码执行一次插入以创建新行,获取最后插入行的id,然后尝试执行更新以加载xml文件。但它不会用xml信息更新行 我想知道如何将xml放入数据库列中。我还希望简化代码,并在一条INSERT语句中执行LOAD_文件 MySQL数据库表结构 Field Datatype Attributes Extra userid INT(6)

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

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

我想知道如何将xml放入数据库列中。我还希望简化代码,并在一条INSERT语句中执行LOAD_文件

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用户必须具有文件权限。它必须是完整的路径。在windows上,需要将后斜杠替换为前斜杠-

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

?>

所以我不应该假设mysql\u查询将在当前目录中查找。php中是否有方法确定当前目录并使用它构建路径?LOAD_FILE是服务器端(mysql服务器)操作,需要能够访问该文件。您可以使用
$path=dirname(\uu文件\uu)
获取当前文件的路径。您最好使用
file\u get\u contents()
将数据加载到字符串中,然后将其传递到查询中。我在回答中添加了另一个例子。PDO准备的语句方法非常有效!谢谢
<?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')));

?>