从sql数据库创建简单的xml文件

时间:2015-01-03 17:27:59

标签: php sql xml

我是sql代码的新手。我需要帮助从我的sql数据库通过php生成一个简单的youtube id的xml文件。

期望的输出

<videos>
<youtube media="http://www.youtube.com/watch?v=_hTiRnqnvDs" autoplay="false"></youtube>
<youtube media="http://www.youtube.com/watch?v=5wx0GfbC0BA" autoplay="false"></youtube>
<youtube media="http://www.youtube.com/watch?v=ERGrSQoY5fs" autoplay="false"></youtube>
</videos>

我的输出

<videos>
<youtube media="http://www.youtube.com/watch?v=![CDATA[$value]]" autoplay="true"></youtube>
<youtube media="http://www.youtube.com/watch?v=![CDATA[$value]]" autoplay="true"></youtube>
<youtube media="http://www.youtube.com/watch?v=![CDATA[$value]]" autoplay="true"></youtube>
</videos>

这是我从数据库查询获得的输出

SELECT keyvalue FROM jr_jryoutube_item_key WHERE key =“youtube_id”

   
----------  -----------
key            value
----------  -----------
youtube_id  3VVAzFlmeWc
youtube_id  Rr9SfJwctRg
youtube_id  ocOZLHyOSZw
youtube_id  n-rQDYNOCyA
youtube_id  VaQlSnII-Hc

以下是我的尝试。它正在生成一个xml文件,但它没有读取youtube id。

 <?php

error_reporting(E_ALL);
     //database configuration
$_conf['jrCore_db_host'] = 'localhost';
$_conf['jrCore_db_port'] = '3306';
$_conf['jrCore_db_name'] = 'xxxxxx';
$_conf['jrCore_db_user'] = 'xxxxxx';
$_conf['jrCore_db_pass'] = 'xxxxxx';

       //connect to host
$con = mysqli_connect($_conf['jrCore_db_host'],$_conf['jrCore_db_user'],$_conf['jrCore_db_pass']);

      // Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
   }

      // select database

mysqli_select_db($con,$_conf['jrCore_db_name']);

echo "Connected successfully";

$myFile = "videos.xml";
$fh = fopen($myFile, 'wb') or die("can't open file");
$xml_txt .= '<videos>';

    // $query is an array with your values
$query = "SELECT `key`,`value` FROM `jr_jryoutube_item_key` WHERE `key` = 'youtube_id'";
 
$result = mysqli_query($con,$query);

if (!$result) {
    die('Invalid query: ' . mysqli_error($con));
}
if(mysqli_num_rows($result)>0)
{
    while($result_array = mysqli_fetch_assoc($result))
    
   {
       
      //loop through each key,value pair in row
      foreach($result_array as $key => $value)
        {          
         //embed the SQL data in a CDATA element to avoid XML entity issues
         $xml_txt .= '<youtube media="http://www.youtube.com/watch?v=![CDATA[$value]]" autoplay="true">';
         $xml_txt .= '</youtube>';  
          
         }
 
     }
}
   
$xml_txt .= '</videos>';
fwrite($fh, $xml_txt);
fclose($fh);
 ?>

1 个答案:

答案 0 :(得分:0)

$query = mysql_query("SELECT `value` FROM `jr_jryoutube_item_key` WHERE `key` = "youtube_id"");

// $query is an array with your values

// sprintf link template, %s is where youtube_id goes
$sprintf_link = '<youtube media="http://www.youtube.com/watch?v=%s" autoplay="true">';

// iterate the query row-wise
foreach($query as $row_idx => $row)
{  
    // fetch value
    $youtube_id = $row['value']; 

    // build link
    $xml_txt .= sprintf($sprintf_link, $youtube_id);  
}

这不会回答连接/添加CDATA部件的部分。 它只是来自db的附加数据,您可以将其连接到字符串或插入sprintf()。

如果SQL查询为true,则可以优化数据库表结构。 你查询和复制字符串&#34; youtube_id&#34;遍布所有行。 您可以使用表格&#34; youtube_id&#34;用&#34;索引&#34; (auto_increment)和&#34; key&#34; (字符串长度11)。