1

MySQL で xml ファイルをテーブルの列にロードしたいと考えています。UPDATE ステートメントの代わりに INSERT ステートメントを使用してこれを行うにはどうすればよいですか?

このコードは、INSERT を実行して新しい行を作成し、最後に挿入された行の ID を取得してから、更新を実行して xml ファイルをロードしようとします。ただし、行は xml 情報で更新されません。

XMLをデータベース列に入れるために何を修正すればよいか知りたいです。また、コードを簡素化し、1 つの 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);

?>
4

1 に答える 1

0

元の挿入物にファイルを追加するだけです。ファイル パスは、サーバー上のファイルのパスです。接続に使用する 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);

?>

更新- これは、 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')));

?>
于 2012-04-13T19:47:05.230 に答える