PHP MySQL XML
###質問
PHPでMySQLからデータ取得してXMLで書きだす方法に不明な所あります。
A:変数$node
下記ソースコードで、①と③は同じ変数$nodeに異なったElement("markers")と("marker")を設定していることが理解できません。
①②で$parnodeを設定したので、もう("markers")は$nodeを使わないので、("marker")が使ってもOKということなのでしょうか?
B:①~④の意味は下記でよろしいのでしょうか。
$node = $dom->createElement("markers"); //...①
①で("markers")を作成。
$parnode = $dom->appendChild($node); //...②
②で("markers")を$domのプロパティとすることで、その("markers")を親ノードにする。
$node = $dom->createElement("marker"); //...③
③で("marker")を作成。
$newnode = $parnode->appendChild($node); //...④
④で $parnode---親ノード("markers")---のプロパティとして("marker")を設定することにより、("marker")を子ノードとして$newnodeに渡している。
###該当のソースコード
目的は、PHPでmySQLからデータ取得してXMLで書きだすことです。
【書き出した結果例】
<?xml version="1.0"?> <markers> <marker name="Round Table Pizza: Mountain View" address="570 N Shoreline Blvd, Mountain View, CA" lat="37.402653" lng="-122.079353" distance="0.38091455044131"/> <marker name="Kapp's Pizza Bar & Grill" address="191 Castro St, MountainView, CA" lat="37.393887" lng="-122.078918" distance="0.5596115438175"/> ... </markers>
上記書き出しのためのソースコードは下記のとおりです。
(https://developers.google.com/maps/articles/phpsqlsearch_v3?hl=ja#createmap の説明文のソースコードです。)
<?php require("phpsqlsearch_dbinfo.php"); // Get parameters from URL $center_lat = $_GET["lat"]; $center_lng = $_GET["lng"]; $radius = $_GET["radius"]; // Start XML file, create parent node $dom = new DOMDocument("1.0"); $node = $dom->createElement("markers"); //...① $parnode = $dom->appendChild($node); //...② // Opens a connection to a mySQL server $connection=mysql_connect (localhost, $username, $password); if (!$connection) { die("Not connected : " . mysql_error()); } // Set the active mySQL database $db_selected = mysql_select_db($database, $connection); if (!$db_selected) { die ("Can\'t use db : " . mysql_error()); } // Search the rows in the markers table $query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20", mysql_real_escape_string($center_lat), mysql_real_escape_string($center_lng), mysql_real_escape_string($center_lat), mysql_real_escape_string($radius)); $result = mysql_query($query); $result = mysql_query($query); if (!$result) { die("Invalid query: " . mysql_error()); } header("Content-type: text/xml"); // Iterate through the rows, adding XML nodes for each while ($row = @mysql_fetch_assoc($result)){ $node = $dom->createElement("marker"); //...③ $newnode = $parnode->appendChild($node); //...④ $newnode->setAttribute("name", $row['name']); $newnode->setAttribute("address", $row['address']); $newnode->setAttribute("lat", $row['lat']); $newnode->setAttribute("lng", $row['lng']); $newnode->setAttribute("distance", $row['distance']); } echo $dom->saveXML(); ?>
回答1件
あなたの回答
tips
プレビュー