Я новичок в sql-коде. Мне нужна помощь для создания простого xml файла идентификатора youtube из моей базы данных sql через php.
ЖЕЛАТЕЛЬНЫЙ ВЫХОД
<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>
Это результат, который я получаю из запроса к базе данных
ВЫБРАТЬ key
, value
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.
<?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);
?>
$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, тогда можно оптимизировать структуру таблицы DB. Вы запрашиваете и реплицируете строку "youtube_id" по всем строкам. Вы можете использовать таблицу "youtube_id" с "index" (auto_increment) и "key" (длина строки 11).