Вариант №2 гораздо безопаснее - на тот случай, если кому-то удастся выполнить атаку SQL-инъекцией на вашу БД, он не сможет затем использовать вашу операцию встраивания для выполнения внедренного PHP на стороне сервера. Лучшее, на что они могли надеяться, это фишинг или атака XSS.
Другой альтернативой является форматирование соответствующих данных в XML и сохранение в базе данных XSLT для преобразования данных в правильный код для встраивания. Это, вероятно, излишнее для вашего случая, но более масштабируемое и менее подверженное ошибкам, чем любое из вышеперечисленного.
РЕДАКТИРОВАТЬ: Скелет код для версии XML
XML
<video>
<url>http://example.com/video.flv</url>
</video>
1012 * XSLT *
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" />
<xsl:template match="video">
<xsl:element name="embed">
<xsl:attribute name="src"><xsl:value-of select="url/text()" /></xsl:attribute>
<xsl:attribute name="width">500</xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:transform>
PHP
// assuming the XSLT above is stored in SomeTable.transform, and the above XML has been stored in $xml_text
$xml_doc = new DOMDocument();
$xml_doc->loadXML($xml_text);
$xsl_doc = new DOMDocument();
$xsl_doc->loadXML(GetXSLT("flv"));
$processor = new XSLTProcessor();
$processor->importStyleSheet($xsl_doc);
echo $processor->transformToXML($xml_doc);
function GetXSLT($type)
{
$db = mysql_connect("user", "password", "host"); // not sure if I got the order right here, but whatever
$res = mysql_query("SELECT transform FROM SomeTable WHERE type = '$type'"); // should use parameters instead of directly embedding the type here to avoid bugs and exploits, but whatever
$array = mysql_fetch_assoc($res);
return $array['transform'];
}
Приятной особенностью этого является то, что вы можете создать класс для генерации входного XML, и он может содержать все параметры, которые вы хотите передать в свой тег <embed>
. Если вы не добавите инструкции обработки в ваш XSLT для их обработки, они будут игнорироваться. Создайте один класс для генерации базового XML и подкласс для каждого типа мультимедиа, который вы хотите отобразить, и генерация XML для передачи преобразований должна быть простой.