jueves, 11 de septiembre de 2014

Guardar y Leer un XML en Microsoft SQL

Éste es código PHP para almacenar un XML en una base de datos Microsoft SQL utilizando la extension mssql.

La idea era almacenarlo el archivo como tal, pero al estar investigando veo que la forma es guardar el contenido del archivo, busqué el tipo de campo BLOB, pero no está con ese nombre así que hice pruebas con el tipo de campo varbinary(MAX), pero el problema fué que me truncaba la información resultando en un XML alterado al momento de leerlo, por lo que me decidí por el tipo de campo TEXT.

La idea es que lea archivo.xml que se supone que estaría en el mismo directorio que este programa PHP, guarda su contenido y en seguida lo lee y lo guarda en archivo2.xml en el mismo directorio.

Claro que pueden modificar el código por si quieren por ejemplo que se descargue automáticamente el XML al momento de leerlo de la BD, o pueden hacer un formulario que suba un XML para luego guardarlo en lugar de tener fijo archivo.xml, pero esas cosas son sencillas y yo sólo quiero demostrar aqui la lógica.

<?php
$filename = 'archivo.xml';
$contents = file_get_contents('archivo.xml');
$contents = substr($contents, 3); //Quita unos caracteres especiales que no deseamos
$contents = unpack("H*hex", $contents); //Lo pasamos a hexadecimal
$contents = $contents['hex'];

//Guarda el contenido del XML convertido a Hexadecimal en la BD
$sql = "INSERT INTO [cfdis] ([archivo_txt]) VALUES ('$contents')";
if (mssql_query($sql, $con)) {

//Lee de la base de datos
$sql = "SELECT TOP 1 [archivo_txt] FROM [cfdis] ORDER BY [id] DESC";
$res = mssql_query($sql, $con);
if (mssql_num_rows($res) > 0) {
$row = mssql_fetch_array($res);
$archivo_txt = $row['archivo_txt'];

$filename = 'archivo2.xml';
if (file_put_contents($filename, pack('H*', $archivo_txt))) {
echo "XML Creado en este mismo directorio con el nombre: $filename<br>";
}
} else {
echo "$sql<br>";
}
} else {
echo "$sql<br>";
}
?>

No hay comentarios:

Publicar un comentario