<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Asier Marqués &#187; Bases de Datos</title>
	<atom:link href="http://asiermarques.com/category/sistemas/bases-de-datos/feed/" rel="self" type="application/rss+xml" />
	<link>http://asiermarques.com</link>
	<description>apuntes personales, arquitectura web y negocios en internet</description>
	<lastBuildDate>Thu, 26 Jan 2012 16:01:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Paginar resultados en SQL Server 2000, al estilo Limit de mySQL</title>
		<link>http://asiermarques.com/2009/01/27/paginar-resultados-en-sql-server-2000-al-estilo-limit-de-mysql/</link>
		<comments>http://asiermarques.com/2009/01/27/paginar-resultados-en-sql-server-2000-al-estilo-limit-de-mysql/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 22:08:53 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://asiermarques.com/?p=1047</guid>
		<description><![CDATA[En mysql para devolver un rango de resultados en una consulta podemos hacerlo usando el comando Limit de la siguiente forma: Select * from tabla Limit 4,8 Esto nos devuelve un rango de 8 resultados desde el 4º encontrado Apunté &#8230; <a href="http://asiermarques.com/2009/01/27/paginar-resultados-en-sql-server-2000-al-estilo-limit-de-mysql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En mysql para devolver un rango de resultados en una consulta podemos hacerlo usando el comando Limit de la siguiente forma:</p>
<p><code>Select * from tabla Limit 4,8</code></p>
<p><span style="color: #008000;">Esto nos devuelve un rango de 8 resultados desde el 4º  encontrado</span></p>
<p>Apunté <a href="http://asiermarques.com/2007/06/03/oracle-con-consultas-limit-de-mysql/" target="_blank">como hacerlo en Oracle</a>, también como hacerlo en <a href="http://asiermarques.com/2007/05/29/sql-server-con-consultas-limit-de-mysql" target="_blank">Microsoft SQL Server 2005/2008</a>, y ahora lo apunto para SQL Server 2000.</p>
<p><code>SELECT TOP 10 t.* FROM tabla as t where t.id = not in<br />
( SELECT TOP 0 id from tabla order by id desc )<br />
order by t.id desc </code><br />
<span style="color: #008000;"><br />
El primer TOP, el principal, indica el número de tuplas a devolver. </span></p>
<p><span style="color: #008000;">El segundo TOP, en la subconsulta, debe ser multiplicar 10 por el número de página de resultados a mostrar menos 1, es decir: (número de página-1) x número de filas a devolver. </span></p>
<p><span style="color: #008000;">En ese ejemplo, el top para la subconsulta sería 0 para la primera página, 10 para la segunda, 20 para la tercera y así sucesivamente.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2009/01/27/paginar-resultados-en-sql-server-2000-al-estilo-limit-de-mysql/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The manga guide to databases</title>
		<link>http://asiermarques.com/2008/10/12/the-manga-guide-to-databases/</link>
		<comments>http://asiermarques.com/2008/10/12/the-manga-guide-to-databases/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 22:01:35 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Innovación]]></category>
		<category><![CDATA[Libros]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://asiermarques.com/?p=823</guid>
		<description><![CDATA[The Manga Guide to Databases is a &#8220;technical&#8221; book that learns basic principles to use databases. This book is written in a new original way to get a more funnier learning of these concepts, a mix between a japanese comic &#8230; <a href="http://asiermarques.com/2008/10/12/the-manga-guide-to-databases/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/exec/obidos/ASIN/1593271905/downandoutint-20" target="_blank">The Manga Guide to Databases</a> is a &#8220;technical&#8221; book that learns basic principles to use databases.</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3269/2931970553_dd75eddb9c.jpg" alt="Guide to databases" width="450" /></p>
<p>This book is written in a new original way to get a more funnier learning of these concepts, a mix between a japanese comic and a technical book.</p>
<p>In the book, princess Ruruna needs to manage her kidgdom in a better way. A fairy called Tico teaches the Princess how to simplify her data management with help of the &#8220;practical magic of databases&#8221;.</p>
<p>This book will be in my next order at Amazon.</p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/10/12/the-manga-guide-to-databases/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trabajar con symfony y sql server 2005</title>
		<link>http://asiermarques.com/2008/07/16/trabajar-con-symfony-y-sql-server-2005/</link>
		<comments>http://asiermarques.com/2008/07/16/trabajar-con-symfony-y-sql-server-2005/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 04:37:44 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sistemas]]></category>
		<category><![CDATA[sql server]]></category>

		<guid isPermaLink="false">http://asiermarques.com/?p=599</guid>
		<description><![CDATA[En la actual versión de symfony se usa Propel junto a Creole para crear un orm y una capa de abstracción entre la base de datos y el resto de nuestra aplicación. Esto nos permite desarrollar aplicaciones independientes del motor &#8230; <a href="http://asiermarques.com/2008/07/16/trabajar-con-symfony-y-sql-server-2005/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En la actual versión de <a href="http://www.symfony-project.org/" target="_blank">symfony</a> se usa <a href="http://asiermarques.com/wp-admin/propel.phpdb.org" target="_blank">Propel</a> junto a <a href="http://creole.phpdb.org/trac/" target="_blank">Creole</a> para crear un <a href="http://en.wikipedia.org/wiki/Object-relational_mapping" target="_blank">orm</a> y una capa de abstracción entre la base de datos y el resto de nuestra aplicación.</p>
<p>Esto nos permite desarrollar aplicaciones independientes del motor de base de datos que usemos.</p>
<p>Php utiliza oficialmente <a href="http://es.php.net/manual/en/book.mssql.php" target="_blank">la librería mssql</a> para conectarse a una base de datos Sql Server y aunque existe <a href="http://blogs.msdn.com/sqlphp/archive/2008/06/05/what-s-new-in-the-may-2008-ctp.aspx" target="_blank">una opción mejor por parte de Microsoft en fase CTP</a>, Propel (y por lo tanto Symfony) la utilizan para conectarse a este tipo de motor.</p>
<p>Sin embargo, para conseguir conectarse y operar con éxito con Sql Server 2005 hay que hacer una serie de configuraciones en php/symfony y hacks en creole.<br />
(Espero que no os siente esto como <a href="http://asiermarques.com/2008/01/17/symfony-vs-zend-framework/#comment-15970" target="_blank">un cubata de Baileys con tonica</a> : )</p>
<p>Vamos a verlo paso por paso:</p>
<p><span style="color: #000000;"><strong>1- <a href="http://asiermarques.com/2007/05/29/conectarse-desde-php-a-una-base-de-datos-sql-server-2005" target="_blank">Actualizar la librería <strong>ntwdblib.dll</strong> a la versión </a><strong><a href="http://asiermarques.com/2007/05/29/conectarse-desde-php-a-una-base-de-datos-sql-server-2005" target="_blank">2000.80.194.0</a>.</strong></strong></span></p>
<p><strong>2- Activar las extensiones php_mssql y php_xsl en el php.ini</strong>.</p>
<p>Adicionalmente debemos indicar los siguientes <a href="http://es.php.net/manual/en/mssql.configuration.php" target="_blank">parámetros para php_mssql</a>:</p>
<p>mssql.datetimeconvert = 0<br />
mssql.textlimit = 2147483647<br />
mssql.textsize = 2147483647</p>
<p><strong>3- Crear nuestra base de datos en Sql Server y asignar el login y permisos adecuados al usuario que usemos para conectarnos.</strong></p>
<p><strong>4- Editar el archivo schema.yml con nuestro <a href="http://www.librosweb.es/symfony_1_1/capitulo8/esquema_de_base_de_datos_de_symfony.html" target="_blank">esquema de base de datos</a>.</strong></p>
<p><strong>5- Configurar la conexión a la base de datos:</strong></p>
<p><span style="color: #008000;">[ruta_completa]\symfony.bat configure:database </span><br />
<span style="color: #008000;">&#8220;mssql://usuario:password@equipo\instancia/nombre_baseDatos&#8221;</span></p>
<p><strong>6- Construir el modelo orm de symfony:</strong></p>
<p><span style="color: #008000;">[ruta_completa]\symfony.bat propel:build_model</span></p>
<p><strong>7- Editar el fichero MSSQLConnection.php ubicado en \lib\plugins\sfPropelPlugin\lib\vendor\creole\drivers\mssql dentro del directorio de symfony.</strong></p>
<p>En el caso de que no se especifique un puerto en el string de conexión a la base de datos, creole te inserta el valor de puerto predeterminado para sql server. Sin embargo, en Sql Server 2005 esto provoca un fallo impidiendo realizar una conexión exitosa a la base de datos.</p>
<p>Para evitar que creole nos meta el puerto si o si, debemos modificar la siguiente secuencia de control en <strong>MSSQLConnection.php:</strong></p>
<p><span style="color: #008000;">if(!empty($dsninfo['port'])) {<br />
$dbhost .= $portDelimiter.$dsninfo['port'];</span></p>
<p><span style="color: #008000;"> }</span></p>
<p><span style="color: #008000;">//*else {<br />
//$dbhost .= $portDelimiter.&#8217;1433&#8242;;<br />
// }</span></p>
<p>Con estas modificaciones ya deberíamos poder trabajar con sql server 2005 <a href="http://www.librosweb.es/symfony_1_1/capitulo8/acceso_a_los_datos.html" target="_blank">desde symfony</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/07/16/trabajar-con-symfony-y-sql-server-2005/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Usando CONVERT para tratar fechas en una consulta tSQL</title>
		<link>http://asiermarques.com/2008/06/25/usando-convert-para-tratar-fechas-en-una-consulta-tsql/</link>
		<comments>http://asiermarques.com/2008/06/25/usando-convert-para-tratar-fechas-en-una-consulta-tsql/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 18:03:53 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://asiermarques.com/?p=576</guid>
		<description><![CDATA[Cuando manejamos tipos de datos datetime y smalldatetime, a menudo es necesaria hacer una cambio de formato de fecha al resultado obtenido de la base de datos. En Sql Server podemos usar la función CONVERT para hacer dichas conversiones directamente &#8230; <a href="http://asiermarques.com/2008/06/25/usando-convert-para-tratar-fechas-en-una-consulta-tsql/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Cuando manejamos tipos de datos datetime y smalldatetime, a menudo es necesaria hacer una cambio de formato de fecha al resultado obtenido de la base de datos.</p>
<p>En Sql Server podemos usar la <a href="http://technet.microsoft.com/es-es/library/ms187928.aspx" target="_blank">función CONVERT</a> para hacer dichas conversiones directamente en la consulta <a href="http://en.wikipedia.org/wiki/Transact-SQL" target="_blank">transact-sql</a>, ahorrándonos trabajo en la lógica de aplicación.</p>
<p>La sintáxis para dicha función es el siguiente:</p>
<pre id="ctl00_rs1_mainContentContainer_ctl05other" class="libCScode">CONVERT ( data_type [ ( length ) ] , expression [ , style ] )</pre>
<p>Un ejemplo aplicado sería:</p>
<pre>CONVERT(varchar(11), campo_fecha, 112) as fecha</pre>
<p>Esto nos convertiría el valor de un campo_fecha del tipo datetime a tipo varchar con un formato ISO (por ejemplo 081231), y le asigna un alias fecha.</p>
<p>Lo que sigue es una tabla de códigos con las distintas opciones de formato para las fechas.</p>
<table style="background-color: #ffffff; font-size: 10px; text-align: center; height: 599px;" border="0" width="485">
<tbody>
<tr>
<td><span style="color: #808080;"><strong>Sin el siglo (aa) (<sup>1</sup>)</strong></span></td>
<td><span style="color: #808080;"><strong>Con el siglo ?(aaaa)</strong></span></td>
<td><span style="color: #808080;"><strong>Estándar</strong></span></td>
<td><span style="color: #808080;"><strong>Entrada/salida (<sup>3</sup>)</strong></span></td>
</tr>
<tr>
<td>-</td>
<td><strong>0</strong> o <strong>100</strong> (<sup>1,</sup> <sup>2</sup>)</td>
<td>Valor predeterminado</td>
<td>mes dd aaaa hh:mia.m. (o p. m.)</td>
</tr>
<tr>
<td><strong>1</strong></td>
<td><strong>101</strong></td>
<td>EE.UU.</td>
<td>mm/dd/aaaa</td>
</tr>
<tr>
<td><strong>2</strong></td>
<td><strong>102</strong></td>
<td>ANSI</td>
<td>
<pre>aa.mm.dd</pre>
</td>
</tr>
<tr>
<td><strong>3</strong></td>
<td><strong>103</strong></td>
<td>Británico/Francés</td>
<td>dd/mm/aa</td>
</tr>
<tr>
<td><strong>4</strong></td>
<td><strong>104</strong></td>
<td>Alemán</td>
<td>dd.mm.aa</td>
</tr>
<tr>
<td><strong>5</strong></td>
<td><strong>105</strong></td>
<td>Italiano</td>
<td>dd-mm-aa</td>
</tr>
<tr>
<td><strong>6</strong></td>
<td><strong>106</strong> <sup>(1)</sup></td>
<td>-</td>
<td>dd mes aa</td>
</tr>
<tr>
<td><strong>7</strong></td>
<td><strong>107</strong> <sup>(1)</sup></td>
<td>-</td>
<td>Mes dd, aa</td>
</tr>
<tr>
<td><strong>8</strong></td>
<td><strong>108</strong></td>
<td>-</td>
<td>hh:mi:ss</td>
</tr>
<tr>
<td>-</td>
<td><strong>9</strong> o <strong>109</strong> (<sup>1,</sup> <sup>2</sup>)</td>
<td>Valor predeterminado + milisegundos</td>
<td>mes dd aaaa hh:mi:ss:mmma.m. (o p. m.)</td>
</tr>
<tr>
<td><strong>10</strong></td>
<td><strong>110</strong></td>
<td>EE.UU.</td>
<td>mm-dd-aa</td>
</tr>
<tr>
<td><strong>11</strong></td>
<td><strong>111</strong></td>
<td>JAPÓN</td>
<td>aa/mm/dd</td>
</tr>
<tr>
<td><strong>12</strong></td>
<td><strong>112</strong></td>
<td>ISO</td>
<td>aammdd</td>
</tr>
<tr>
<td>-</td>
<td><strong>13</strong> o <strong>113</strong> (<sup>1,</sup> <sup>2</sup>)</td>
<td>Europeo predeterminado + milisegundos</td>
<td>dd mes aaaa hh:mi:ss:mmm(24h)</td>
</tr>
<tr>
<td><strong>14</strong></td>
<td><strong>114</strong></td>
<td>-</td>
<td>hh:mi:ss:mmm(24h)</td>
</tr>
<tr>
<td>-</td>
<td><strong>20</strong> o <strong>120</strong> (<sup>2</sup>)</td>
<td>ODBC canónico</td>
<td>aaaa-mm-dd hh:mi:ss(24h)</td>
</tr>
<tr>
<td>-</td>
<td><strong>21</strong> o <strong>121</strong> (<sup>2</sup>)</td>
<td>ODBC canónico (con milisegundos)</td>
<td>aaaa-mm-dd hh:mi:ss.mmm(24h)</td>
</tr>
<tr>
<td>-</td>
<td><strong>126 </strong>(<sup>4</sup>)</td>
<td>ISO8601</td>
<td>aaaa-mm-ddThh:mi:ss.mmm (sin espacios)</td>
</tr>
<tr>
<td></td>
<td><strong>127</strong>(<sup>6, 7</sup>)</td>
<td>ISO8601 con zona horaria Z.</td>
<td>aaaa-mm-ddThh:mi:ss.mmmZ</p>
<p>(sin espacios)</td>
</tr>
<tr>
<td>-</td>
<td><strong>130</strong> (<sup>1,</sup> <sup>2</sup>)</td>
<td>Hijri (<sup>5</sup>)</td>
<td>dd mes aaaa hh:mi:ss:mmma.m.</td>
</tr>
<tr>
<td>-</td>
<td><strong>131</strong> (<sup>2</sup>)</td>
<td>Hijri (<sup>5</sup>)</td>
<td>dd/mm/aa hh:mi:ss:mmma.m.</td>
</tr>
</tbody>
</table>
<p>1 Estos valores de estilo devuelven resultados no deterministas. Incluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo).</p>
<p>2 Los valores predeterminados (style 0 o 100, 9 o 109, 13 o 113, 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa).</p>
<p>3 Entrada cuando se convierte en datetime; salida cuando se convierte en datos de caracteres.</p>
<p>4 Diseñado para usarse con XML. Para convertir datos datetime o smalldatetime en datos de caracteres, el formato de salida es el descrito en la tabla anterior.</p>
<p>5 Hijri es un sistema de calendario con varias variaciones. SQL Server 2005 usa el algoritmo Kuwaiti.</p>
<p><a href="http://technet.microsoft.com/es-es/library/ms187928.aspx" target="_blank">Enlace a la documentación oficial</a></p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/06/25/usando-convert-para-tratar-fechas-en-una-consulta-tsql/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Baron Schwartz, MySql performance basics</title>
		<link>http://asiermarques.com/2008/05/16/baron-schwartz-mysql-performance-basics/</link>
		<comments>http://asiermarques.com/2008/05/16/baron-schwartz-mysql-performance-basics/#comments</comments>
		<pubDate>Fri, 16 May 2008 09:28:42 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://asiermarques.com/?p=546</guid>
		<description><![CDATA[Baron Schwartz, coautor de la segunda edición de MySql performance y consultor de Percona, hizo una presentación en el beCamp 2008, en la que hablaba de conceptos básicos sobre rendimiento en bases de datos mySQL. Tenéis dicha presentación aquí y &#8230; <a href="http://asiermarques.com/2008/05/16/baron-schwartz-mysql-performance-basics/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.xaprb.com/blog/" target="_blank">Baron Schwartz</a>, coautor de la <a href="http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/0596101716/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1210929792&amp;sr=8-1" target="_blank">segunda edición de MySql performance</a> y consultor de <a href="http://www.percona.com/" target="_blank">Percona</a>, hizo una presentación en el <a href="http://barcamp.org/beCamp2008" target="_blank">beCamp 2008</a>, en la que hablaba de conceptos básicos sobre rendimiento en bases de datos mySQL.</p>
<p>Tenéis dicha presentación <a href="http://asiermarques.com/wp-content/uploads/2008/05/mysql_basics_becamp_2008.pdf" target="_blank">aquí</a> y <a href="http://www.percona.com/files//presentations/MySQL_Basics_beCamp_2008.pdf" target="_blank">aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/05/16/baron-schwartz-mysql-performance-basics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recuperar último id insertado en SQL Server desde php con el Driver Oficial de Microsoft</title>
		<link>http://asiermarques.com/2008/05/14/recuperar-ultimo-id-insertado-en-sql-server-desde-php-con-el-driver-oficial-de-microsoft/</link>
		<comments>http://asiermarques.com/2008/05/14/recuperar-ultimo-id-insertado-en-sql-server-desde-php-con-el-driver-oficial-de-microsoft/#comments</comments>
		<pubDate>Wed, 14 May 2008 07:46:37 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://asiermarques.com/?p=543</guid>
		<description><![CDATA[Microsoft ha publicó hace unos meses la versión RTM de su driver oficial para php que permite conectarse a sus bases de datos SQL Server. Vamos a usar dicho driver para mostrar cómo recuperaríamos el último id insertado en una &#8230; <a href="http://asiermarques.com/2008/05/14/recuperar-ultimo-id-insertado-en-sql-server-desde-php-con-el-driver-oficial-de-microsoft/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Microsoft ha publicó hace unos meses la <a href="http://blogs.msdn.com/sqlphp/archive/2008/02/19/the-february-08-ctp-is-now-available.aspx" target="_blank">versión RTM de su driver oficial para php</a> que permite conectarse a sus bases de datos SQL Server.</p>
<p>Vamos a usar dicho driver para mostrar cómo recuperaríamos el último id insertado en una tabla.</p>
<p><code><br />
//Especificamos el servidor<br />
$server = "HOST\INSTANCIA";<br />
//Especificamos los datos de acceso y la base de datos<br />
$info = array( "Database"=>"bd","UID" =>"user","PWD" =>"pass");<br />
//nos conectamos<br />
$c = sqlsrv_connect( $server, $info);<br />
//especificamos el código sql para la consulta parametrizada<br />
$sql =  "INSERT INTO tabla (valor) VALUES (?);";<br />
//Scope_Identity nos devuelve el último id insertado<br />
$sql .= "SELECT  Scope_Identity() as id;";<br />
/*<br />
especificamos el valor o valores que se pasarán como<br />
parámetros en la consulta anterior<br />
**/<br />
$param = array($valor);<br />
//preparamos la consulta<br />
$s = sqlsrv_prepare($c, $sql, $param);<br />
//ejecutamos la consulta<br />
sqlsrv_execute($s);<br />
/**<br />
*<br />
En este momento se ha ejecutado la consulta pero, al contrario<br />
de lo que podamos deducir, no se devuelve ningún valor 'id'<br />
aunque hagamos un fetch<br />
para obtenerlo debemos hacer un sqlsrv_next_result();<br />
**/<br />
sqlsrv_next_result($s);<br />
//Ahora sí, hacemos un fetch<br />
$r = sqlsrv_fetch_array($s, SQLSRV_FETCH_ASSOC);<br />
//Mostramos el resultado<br />
echo "Hemos insertado una fila con el id: ".$r['id'];<br />
//liberamos la variable de estado<br />
sqlsrv_free_stmt($s);<br />
//cerramos la conexión<br />
sqlsrv_close($c);<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/05/14/recuperar-ultimo-id-insertado-en-sql-server-desde-php-con-el-driver-oficial-de-microsoft/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Límites en sql server 2005 express edition</title>
		<link>http://asiermarques.com/2008/02/20/limites-en-sql-server-2005-express-edition/</link>
		<comments>http://asiermarques.com/2008/02/20/limites-en-sql-server-2005-express-edition/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 01:18:36 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://www.asiermarques.com/2008/02/20/limites-en-sql-server-2005-express-edition/</guid>
		<description><![CDATA[Como sabéis, sql server 2005 express edition es una edición gratuita de sql server 2005. A pesar de ser gratuita, posee una serie de funcionalidades que pueden cubrir de sobra los requisitos iniciales de muchos proyectos serios. En algunos casos &#8230; <a href="http://asiermarques.com/2008/02/20/limites-en-sql-server-2005-express-edition/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como sabéis, <a href="http://www.microsoft.com/express/sql" target="_blank">sql server 2005 express edition</a> es una edición gratuita de sql server 2005.</p>
<p>A pesar de ser gratuita, posee una serie de funcionalidades que pueden cubrir de sobra los requisitos iniciales de muchos proyectos serios. En algunos casos los puede cubrir para todo su ciclo de vida útil como en el caso de un blog o pequeñas aplicaciones web cms para internet.</p>
<p>Migrar en un futuro la base de datos de un sistema express a una edición profesional es algo trivial, por lo que si un proyecto requiere sql server 2005, es imprescindible conocer bien lo que da de sí la versión express de la misma.</p>
<p>En éste post voy a poner los límites más importantes que tiene ésta edición de sql server 2005 (están sacados de la <a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/msde2sqlexpress.mspx" target="_blank">comparativa oficial MSDE vs SQL Server Express 2005</a>)</p>
<ul>
<li> Número de procesadores máximos admitidos: <strong>1 procesador</strong></li>
<li>Memoria máxima admitida: <strong>1Gb</strong></li>
<li>Espacion máximo de la base de datos en disco: <strong>4Gb</strong></li>
<li>Instancias máximas: <strong>16 instancias</strong></li>
<li>Posibilidad de disponer de <strong>búsquedas de Texto Completo con los <a href="https://lb1.www.ms.akadns.net/downloads/details.aspx?familyid=4C6BA9FD-319A-4887-BC75-3B02B5E48A40&amp;displaylang=en" target="_blank">servicios avanzados</a><br />
</strong></li>
<li>Soporte para <strong>replicación: <a href="http://msdn2.microsoft.com/en-us/library/ms152531.aspx" target="_blank">subscripciones merge, snapshot y transaccional</a>.</strong></li>
<li>Servicio de <strong>reportes (</strong><strong>con los <a href="https://lb1.www.ms.akadns.net/downloads/details.aspx?familyid=4C6BA9FD-319A-4887-BC75-3B02B5E48A40&amp;displaylang=en" target="_blank">servicios avanzados</a></strong><strong>)<br />
</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/02/20/limites-en-sql-server-2005-express-edition/feed/</wfw:commentRss>
		<slash:comments>55</slash:comments>
		</item>
		<item>
		<title>Drupal en IIS7 sobre Windows 2008 Server</title>
		<link>http://asiermarques.com/2008/02/17/drupal-en-iis7-sobre-windows-2008-server/</link>
		<comments>http://asiermarques.com/2008/02/17/drupal-en-iis7-sobre-windows-2008-server/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 21:46:35 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Servidores Web]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://www.asiermarques.com/2008/02/17/iis-70-con-drupal-en-windows-2008-server/</guid>
		<description><![CDATA[Ésta semana David Cervigón publicó un post sobre cómo servir aplicaciones php en IIS7. Yo en éste post voy a explicar cómo instalar en windows 2008 server Drupal, uno de los CMS open source más serios actualmente y sobre el &#8230; <a href="http://asiermarques.com/2008/02/17/drupal-en-iis7-sobre-windows-2008-server/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ésta semana <a href="http://blogs.technet.com/davidcervigon/archive/2008/02/13/php-5-x-y-mysql-sobre-iis7-peque-a-gu-a-r-pida.aspx" target="_blank">David Cervigón publicó un post</a> sobre cómo servir aplicaciones php en <a href="http://iis.net" target="_blank">IIS7</a>.</p>
<p>Yo en éste post voy a explicar cómo instalar en windows 2008 server  <a href="http://drupal.com" target="_blank">Drupal</a>, uno de los CMS open source más serios actualmente y sobre el que hay mayor <a href="http://www.amazon.com/s/ref=nb_ss_gw/103-9031632-2161408?url=search-alias%3Daps&amp;field-keywords=drupal&amp;x=0&amp;y=0" target="_blank">documentación</a>. Sitios como la facultad de <a href="http://harvardscience.harvard.edu/" target="_blank">ingeniería y ciencia de la Universidad de Hardvard</a>, <a href="http://mobuzz.tv" target="_blank">MobuzzTv</a>, <a href="http://www.observer.com/" target="_blank">TheNew York Observer</a> entre <a href="http://drupal.org/forum/25" target="_blank">otros</a>, usan Drupal para publicar sus contenidos.</p>
<p>En éste tutorial no mostraré cómo optimizar Drupal ni IIS, ni el url_rewrite, ni cómo configurar el servicio SMTP para envío de correo. Lo dejo para post posteriores.</p>
<p>He utilizado un entorno con <a href="http://www.microsoft.com/windowsserver2008/en/us/default.aspx" target="_blank">Windows 2008 Server</a> Web Edition sobre 32 bits y en una instalación completa. (intentaré hacer un post en el futuro con una instalación server core, que es la que más me atrae <strike>sexualmente</strike>)</p>
<ol>
<li>Instalo la función del servidor IIS con el check de CGI cuando pregunte en el listado de servicios de función.
<p style="text-align: center"><img src="http://farm3.static.flickr.com/2068/2271877251_28c09c8cc9.jpg" alt="iis7-php" width="450" /></p>
</li>
<li>Voy a php.net y descargo la última versión de PHP (<a href="http://www.php.net/get/php-5.2.5-nts-Win32.zip/from/a/mirror" target="_blank">ahora mismo 5.2.5</a>) para windows &#8220;<a href="http://www.iis-aid.com/articles/my_word/difference_between_php_thread_safe_and_non_thread_safe_binaries" target="_blank">non-thread safe</a>&#8220;</li>
<li>Descomprimo el paquete en un directorio (ej: <strong>c:\php</strong>) y creo una nueva <a href="http://es.php.net/manual/en/faq.installation.php#faq.installation.addtopath" target="_blank">variable de entorno PHPRC en el sistema</a> y <a href="http://www.php.net/manual/en/ref.mysql.php" target="_blank">modifico la variable PATH</a> añadiéndole el directorio php.<a href="http://www.flickr.com/photos/amarques/2271833171/" target="_blank" title="php-2008-full-1 por asiermarques, en Flickr"><br />
</a></p>
<p style="text-align: center"><a href="http://www.flickr.com/photos/amarques/2271833171/" target="_blank" title="php-2008-full-1 por asiermarques, en Flickr"><img src="http://farm3.static.flickr.com/2180/2271833171_d08b919583.jpg" alt="php-2008-full-1" width="450" /></a></p>
<p>Reinicio el sistema. (Por cierto ni se te ocurra añadir el grupo &#8220;todos&#8221; a la pestaña de seguridad del php.ini ;) )</li>
<li>Creo un nuevo sitio web en IIS (si respondiese a un dominio concreto, lo indicaría en el encabezado de host, excepto si necesitaría wildcard dns [*.dominio.com] que lo dejaría sin encabezado &#8211; hay que tener cuidado con ésto en entornos en los que alojemos varios dominios distintos -).</li>
<li>En ese sitio web, voy a &#8220;asignaciones de controlador&#8221; <img src="http://farm3.static.flickr.com/2016/2271833245_ff8cc77ab8_o.png" alt="php-2008-full-2" align="middle" height="76" width="86" /> y creo una nueva &#8220;asignación de módulo&#8221;. Indico *.php en ruta de acceso, fastcgi cómo módulo y el ejecutable php-cgi.exe, tal y cómo vemos en la captura:
<p style="text-align: center"><img src="http://farm3.static.flickr.com/2293/2272626216_03b3797b4a.jpg" alt="php-2008-full-3" width="450" /></p>
</li>
<li>En la raiz del sitio web voy a &#8220;Documento predeterminado&#8221; y añado &#8220;index.php&#8221;</li>
<li>Bajamos mysql y lo instalamos (Si deseamos probar la versión 5.1RC deberemos descargar el paquete <a href="http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-essential-5.1.22-rc-win32.msi/from/http://mirror.trouble-free.net/mysql_mirror/" target="_blank">mysql-essential 5.1.22</a>, el resto me han dado problemas al lanzar el configurador de instancias). <a href="http://blogs.technet.com/davidcervigon/" target="_blank">Como comenta David Cervigón</a>, la última versión estable para instalar que no da problemas es la <a href="http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-essential-5.0.45-win32.msi/from/http://mysql.rediris.es/" target="_blank">5.0.45</a>.</li>
<li>Una vez instalada mysql, abro el php.ini (Inicio/ejecutar php.ini -si hemos ejecutado bien el paso 3), descomento las extensiones para mysql (mysql y mysqli) junto a las otras que me hagan falta -como <a href="http://es.php.net/gd" target="_blank">gd2</a> y <a href="http://es.php.net/mbstring" target="_blank">mbstring</a> por ejemplo- y modifico la variable extension_dir con <strong><em>extension_dir = &#8220;c:\php\ext&#8221;</em></strong></li>
<li>Bajamos la última versión estable de drupal, en mi caso <a href="http://drupal.org/node/221219" target="_blank">la 6.0</a>, y lo descomprimimos en el directorio de nuestro nuevo sitio web</li>
<li>Creamos una base de datos nueva que usará drupal con un usuario que tenga permisos sobre esa base de datos exclusivamente (nunca el usuario root! ;) ). Recomiendo el uso de las herramientas oficiales de administración, <a href="http://dev.mysql.com/downloads/gui-tools/5.0.html" target="_blank">mysql gui tools</a>.. que son gratuitas.</li>
<li>Hecho esto, accedemos a nuestro sitio web por el navegador y comenzamos la instalación de drupal.. la cual no tiene mucho misterio.</li>
<li>Tras instalar no os olvideis de dar los permisos adecuados al sitio web y en el directorio <em>./sites/default/ </em>dar permisos de <strong>lectura únicamente (quitando el resto)</strong> al usuario IIS_IUSRS (si podéis dejar sólo los grupos administradores, usuarios y IIS_IUSRS con permisos en la raiz del sitio.. mejor)</li>
<li>Y con ésto ya tendríamos el sitio funcionando correctamente.
<p style="text-align: center"><img src="http://farm3.static.flickr.com/2024/2271833655_9d1ae2c04d.jpg" alt="php-2008-full-6" width="450" /></p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/02/17/drupal-en-iis7-sobre-windows-2008-server/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Jay Pipes &#8211; Mejores prácticas para tuning de rendimiento en mySQL</title>
		<link>http://asiermarques.com/2008/01/07/jay-pipes-mejores-practicas-para-tuning-de-rendimiento-en-mysql/</link>
		<comments>http://asiermarques.com/2008/01/07/jay-pipes-mejores-practicas-para-tuning-de-rendimiento-en-mysql/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 13:28:13 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://www.asiermarques.com/2008/01/07/jay-pipes-mejores-practicas-para-tuning-de-rendimiento-en-mysql/</guid>
		<description><![CDATA[[google 2524524540025172110]]]></description>
			<content:encoded><![CDATA[<p align="center">[google 2524524540025172110]</p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2008/01/07/jay-pipes-mejores-practicas-para-tuning-de-rendimiento-en-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Extraer un fichero local de un servidor mysql mediante una sql injection</title>
		<link>http://asiermarques.com/2007/12/18/extraer-un-fichero-local-de-un-servidor-mediante-una-sql-injection/</link>
		<comments>http://asiermarques.com/2007/12/18/extraer-un-fichero-local-de-un-servidor-mediante-una-sql-injection/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 17:11:09 +0000</pubDate>
		<dc:creator>Asier</dc:creator>
				<category><![CDATA[Bases de Datos]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[Sistemas]]></category>

		<guid isPermaLink="false">http://www.asiermarques.com/2007/12/18/extraer-un-fichero-local-de-un-servidor-mediante-una-sql-injection/</guid>
		<description><![CDATA[En mysql existe la función LOAD_FILE que admite como parámetro la ruta de un fichero local en Hexadecimal. Si por ejemplo convertimos &#8220;c:\boot.ini&#8221; a su representación hexadecimal &#8220;0x633A5C626F6F742E696E69&#8243; y se realiza la injection de abajo, la condición será True si la &#8230; <a href="http://asiermarques.com/2007/12/18/extraer-un-fichero-local-de-un-servidor-mediante-una-sql-injection/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>En mysql existe la función <a target="_blank" href="http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_load-file">LOAD_FILE</a> que admite como parámetro la ruta de un fichero local en Hexadecimal.</p>
<p>Si por ejemplo convertimos &#8220;c:\boot.ini&#8221; a su representación hexadecimal &#8220;0x633A5C626F6F742E696E69&#8243; y se realiza la injection de abajo, la condición será True si la primera letra del fichero corresponde con el carácter ASCII 1.</p>
<blockquote><p><code>http://www.dominioejemplo.com/index.php?id=1 and<br />
mid(Load_File(0x633A5C626F6F742E696E69),1,1)=CHAR(1)</code></p></blockquote>
<p>Por cada query de éste tipo carga el archivo completo en memoria, recorriendo todos los valores posibles del alfabeto hasta llegar al final del mismo.</p>
<p>Fuente: 3ª Parte del <a target="_blank" href="http://elladodelmal.blogspot.com/2007/12/tcnicas-avanzadas-en-ataques-blind-sql_17.html">artículo &#8220;Técnicas avanzadas de Blind SQL Injection</a> por Chema Alonso&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://asiermarques.com/2007/12/18/extraer-un-fichero-local-de-un-servidor-mediante-una-sql-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

