2012-04-13 1 views
1

xmlファイルをMySQLでテーブルの列にロードしたいとします。 UPDATEステートメントの代わりにINSERTステートメントでこれを行うにはどうすればよいですか?MySQL LOAD_FILE()で列にXMLを追加する

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

xmlをデータベースの列に入れるために修正する必要があることを知りたいと思います。私はまた、コードを合理化し、1つのINSERTステートメントでLOAD_FILEを実行する必要があります。 xmlファイルを追加する

のMySQLデータベースのテーブル構造

Field   Datatype  Attributes   Extra 

userid  INT(6)   unsigned    auto_increment 
user_events LONGTEXT 

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

?> 

答えて

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

?> 

UPDATEを -

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

?> 
+0

は、だから私は現在になりますそのするmysql_queryを仮定するべきではありません - ここPDO prepared statementfile_get_contents()を使用して別のバージョンでありますディレクトリ。現在のディレクトリを決定し、それを使ってパスを構築する方法はありますか? – user823527

+0

LOAD_FILEはサーバサイド(mysqlサーバ)アクションであり、ファイルにアクセスできる必要があります。 '$ path = dirname(__ FILE __);'を使うと、現在のファイルへのパスを得ることができます。 'file_get_contents()'を使って文字列にデータをロードし、それをクエリに渡すほうが良いでしょう。私は私の答えに別の例を加えました。 – nnichols

+0

PDOの準備されたステートメントのアプローチは非常にうまく機能しました!ありがとう。 – user823527

関連する問題