<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Curso_POO_PHP_MySQLi</id>
	<title>Curso POO PHP MySQLi - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Curso_POO_PHP_MySQLi"/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_MySQLi&amp;action=history"/>
	<updated>2026-10-23T22:54:50Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_MySQLi&amp;diff=36411&amp;oldid=prev</id>
		<title>Vlourido: /* Consultas preparadas */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Curso_POO_PHP_MySQLi&amp;diff=36411&amp;oldid=prev"/>
		<updated>2013-07-15T21:10:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Consultas preparadas&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== MySQLi ==&lt;br /&gt;
&lt;br /&gt;
[http://docs.php.net/manual/es/book.mysqli.php Esta extensión] desenvolveuse para aproveitar as vantaxes que ofrecen as versións 4.1.3 e posteriores de MySQL, e vén incluída con PHP a partir da versión 5. Ofrece un interface de programación dual, podendo accederse ás funcionalidades da extensión utilizando obxectos ou funcións de forma indiferente.&lt;br /&gt;
&lt;br /&gt;
Por exemplo, para establecer unha conexión cun servidor MySQL e consultar a súa versión, podemos utilizar calquera das seguintes formas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$conexion = new mysqli(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;contrasinal&amp;#039;, &amp;#039;base_de_datos&amp;#039;);&lt;br /&gt;
print conexion-&amp;gt;server_info;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$conexion = mysqli_connect(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;contrasinal&amp;#039;, &amp;#039;base_de_datos&amp;#039;);&lt;br /&gt;
print mysqli_get_server_info($conexion);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A utilización dos métodos e propiedades que achega a clase mysqli normalmente produce un código máis curto e lexible que se utilizas chamadas funcións. Entre as melloras que achega á antiga extensión mysql, figuran:&lt;br /&gt;
&lt;br /&gt;
* Interface orientado a obxectos (nos dous exemplos anteriores, &amp;#039;&amp;#039;$conexion&amp;#039;&amp;#039; é un obxecto).&lt;br /&gt;
* Soporte para transaccións.&lt;br /&gt;
* Soporte para consultas preparadas.&lt;br /&gt;
* Mellores opcións de depuración.&lt;br /&gt;
&lt;br /&gt;
=== Configuración de MySQLi ===&lt;br /&gt;
&lt;br /&gt;
No ficheiro php.ini hai unha sección específica para as opcións de configuración propias de cada extensión. Entre as [http://docs.php.net/manual/es/mysqli.configuration.php opcións que podes configurar para a extensión MySQLi] están:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mysqli.allow_persistent&amp;#039;&amp;#039;&amp;#039;. Permite crear conexións persistentes.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mysqli.default_port&amp;#039;&amp;#039;&amp;#039;. Número de porto TCP predeterminado a utilizar cando se conecta ao servidor de base de datos.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mysqli.reconnect&amp;#039;&amp;#039;&amp;#039;. Indica se se debe volver conectar automaticamente en caso de que se perda a conexión.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mysqli.default_host&amp;#039;&amp;#039;&amp;#039;. Host predeterminado a usar cando se conecta ao servidor de base de datos.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mysqli.default_user&amp;#039;&amp;#039;&amp;#039;. Nome de usuario predeterminado a usar cando se conecta ao servidor de base de datos.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;mysqli.default_pw&amp;#039;&amp;#039;&amp;#039;. Contrasinal predeterminado a usar cando se conecta ao servidor de base de datos.&lt;br /&gt;
&lt;br /&gt;
=== Establecemento de conexións ===&lt;br /&gt;
&lt;br /&gt;
Con MySQLi, establecer unha conexión co servidor significa crear unha instancia da &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/class.mysqli.php clase mysqli]&amp;#039;&amp;#039;&amp;#039;. O construtor da clase pode recibir seis parámetros, todos opcionais, aínda que o máis habitual é utilizar os catro primeiros:&lt;br /&gt;
&lt;br /&gt;
* o nome ou dirección IP do servidor MySQL ao que che queres conectar.&lt;br /&gt;
* un nome de usuario con permisos para establecer a conexión.&lt;br /&gt;
* o contrasinal do usuario.&lt;br /&gt;
* o nome da base de datos á que conectarse.&lt;br /&gt;
* o número do porto en que se executa o servidor MySQL.&lt;br /&gt;
* o socket ou a canalización con nome (named pipe) a usar.&lt;br /&gt;
&lt;br /&gt;
Outra forma de obter unha instancia da clase mysqli é empregando a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/function.mysqli-connect.php mysqli_connect]&amp;#039;&amp;#039;&amp;#039;. Por tanto, establecer unha conexión á base de datos &amp;quot;platega&amp;quot; pódese facer de calquera das seguintes formas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$db = new mysqli(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;abc123.&amp;#039;, &amp;#039;platega&amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$db = new mysqli();&lt;br /&gt;
$db-&amp;gt;connect(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;abc123.&amp;#039;, &amp;#039;platega&amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$db = mysqli_connect(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;abc123.&amp;#039;, &amp;#039;platega&amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
É importante verificar que a conexión se estableceu correctamente. Para comprobar o erro, en caso de que se produza, podes usar as seguintes propiedades (ou funcións equivalentes) da clase mysqli:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.connect-errno.php connect_errno]&amp;#039;&amp;#039;&amp;#039; (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.connect-errno.php mysqli_connect_errno]&amp;#039;&amp;#039;&amp;#039;) devolve o número de erro ou null se non se produce ningún erro.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.connect-error.php connect_error]&amp;#039;&amp;#039;&amp;#039; (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.connect-error.php mysqli_connect_error]&amp;#039;&amp;#039;&amp;#039;) devolve a mensaxe de erro ou null se non se produce ningún erro.&lt;br /&gt;
&lt;br /&gt;
Por exemplo, o seguinte código comproba o establecemento dunha conexión coa base de datos &amp;quot;platega&amp;quot; e finaliza a execución se se produce algún erro:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@ $db = new mysqli(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;abc123.&amp;#039;, &amp;#039;platega&amp;#039;);&lt;br /&gt;
$error = $db-&amp;gt;connect_errno;&lt;br /&gt;
if ($error != null) {&lt;br /&gt;
	echo &amp;quot;&amp;lt;p&amp;gt;Erro $error conectando á base de datos: $db-&amp;gt;connect_error&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
	exit();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se unha vez establecida a conexión, queres cambiar a base de datos podes usar o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.select-db.php select_db]&amp;#039;&amp;#039;&amp;#039; (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.select-db.php mysqli_select_db]&amp;#039;&amp;#039;&amp;#039; de forma equivalente) para indicar o nome da nova.&lt;br /&gt;
&lt;br /&gt;
Unha vez finalizadas as tarefas coa base de datos, utiliza o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.close.php close]&amp;#039;&amp;#039;&amp;#039; (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.close.php mysqli_close]&amp;#039;&amp;#039;&amp;#039;) para pechar a conexión coa base de datos e liberar os recursos que utiliza.&lt;br /&gt;
&lt;br /&gt;
=== Execución de consultas ===&lt;br /&gt;
&lt;br /&gt;
A forma máis inmediata de executar unha consulta con MySQLi é o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.query.php query]&amp;#039;&amp;#039;&amp;#039;, equivalente á función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.query.php mysqli_query]&amp;#039;&amp;#039;&amp;#039;. Se se executa unha consulta de acción que non devolve datos (como unha sentenza SQL de tipo UPDATE, INSERT ou DELETE), a chamada devolve true se se executa correctamente ou false en caso contrario. O número de rexistros afectados pódese obter coa propiedade &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.affected-rows.php affected_rows]&amp;#039;&amp;#039;&amp;#039; (ou coa función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.affected-rows.php mysqli_affected_rows]&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
No caso de executar unha sentenza SQL que si devolva datos (como un SELECT), estes devólvense en forma dun obxecto da &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/class.mysqli-result.php clase mysqli_result]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
@ $db = new mysqli(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;abc123.&amp;#039;, &amp;#039;platega&amp;#039;);&lt;br /&gt;
$error = $db-&amp;gt;connect_errno;&lt;br /&gt;
if ($error == null) {&lt;br /&gt;
   $resultado = $db-&amp;gt;query(&amp;#039;DELETE FROM stock WHERE unidades=0&amp;#039;);&lt;br /&gt;
   if($resultado) print &amp;quot;&amp;lt;p&amp;gt;Borráronse $db-&amp;gt;affected_rows rexistros.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$db-&amp;gt;close();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O método query ten un parámetro opcional que afecta a como se obteñen internamente os resultados, pero non á forma de utilizalos posteriormente. Na opción por defecto, &amp;#039;&amp;#039;&amp;#039;MYSQLI_STORE_RESULT&amp;#039;&amp;#039;&amp;#039;, os resultados recupéranse todos xuntos da base de datos e almacénanse de forma local. Se cambiamos esta opción polo valor &amp;#039;&amp;#039;&amp;#039;MYSQLI_USE_RESULT&amp;#039;&amp;#039;&amp;#039;, os datos vanse recuperando do servidor segundo se vaian necesitando.&lt;br /&gt;
&lt;br /&gt;
É importante ter en conta que os resultados obtidos se almacenarán en memoria mentres os esteas a usar. Cando xa non os necesites, pódelos liberar co método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.free.php free]&amp;#039;&amp;#039;&amp;#039; da clase mysqli_result (ou coa función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.free.php mysqli_free_result]&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$resultado-&amp;gt;free();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Transaccións ===&lt;br /&gt;
&lt;br /&gt;
Se necesitas utilizar transaccións deberás asegurarte de que estean soportadas polo motor de almacenamento que xestiona as túas táboas en MySQL. Se utilizas InnoDB, por defecto cada consulta individual inclúese dentro da súa propia transacción. Podes xestionar este comportamento co método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.autocommit.php autocommit]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.autocommit.php mysqli_autocommit]&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// deshabilitamos o modo transaccional automático&lt;br /&gt;
$db-&amp;gt;autocommit(false);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ao deshabilitar as transaccións automáticas, as vindeiras operacións sobre a base de datos iniciarán unha transacción que deberás finalizar utilizando:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.commit.php commit]&amp;#039;&amp;#039;&amp;#039; (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.commit.php mysqli_commit]&amp;#039;&amp;#039;&amp;#039;). Realizar unha operación &amp;quot;commit&amp;quot; da transacción actual, devolvendo true se se realizou correctamente ou false en caso contrario.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.rollback.php rollback]&amp;#039;&amp;#039;&amp;#039; (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.rollback.php mysqli_rollback]&amp;#039;&amp;#039;&amp;#039;). Realizar unha operación &amp;quot;rollback&amp;quot; da transacción actual, devolvendo true se se realizou correctamente ou false en caso contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
…&lt;br /&gt;
$db-&amp;gt;query(&amp;#039;DELETE FROM stock WHERE unidades=0&amp;#039;);  // Inicia unha transacción&lt;br /&gt;
$db-&amp;gt;query(&amp;#039;UPDATE stock SET unidades=3 WHERE produto=&amp;quot;XXXXXXX&amp;quot;&amp;#039;);&lt;br /&gt;
…&lt;br /&gt;
$db-&amp;gt;commit();  // Confirma os cambios&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unha vez finalizada cada transacción, a seguinte operación sobre a base de datos comezará outra nova transacción de forma automática.&lt;br /&gt;
&lt;br /&gt;
=== Obtención e utilización de conxuntos de resultados ===&lt;br /&gt;
&lt;br /&gt;
Xa sabes que ao executar unha consulta que devolve datos obtés un obxecto da clase &amp;#039;&amp;#039;&amp;#039;mysqli_result&amp;#039;&amp;#039;&amp;#039;. Esta clase segue os criterios de ofrecer un interface de programación dual, é dicir, unha función por cada método coa mesma funcionalidade que este.&lt;br /&gt;
&lt;br /&gt;
Para traballar cos datos obtidos do servidor, tes varias posibilidades:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-array.php fetch_array]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-array.php mysqli_fetch_array]&amp;#039;&amp;#039;&amp;#039;). Obtén un rexistro completo do conxunto de resultados e almacénao nun array. Por defecto o array contén tanto claves numéricas como asociativas. Por exemplo, para acceder ao primeiro campo devolto, podemos utilizar como clave o número 0 ou o seu nome indistintamente.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$resultado = $db-&amp;gt;query(&amp;#039;SELECT produto, unidades FROM stock WHERE unidades&amp;lt;2&amp;#039;);&lt;br /&gt;
$stock = $resultado-&amp;gt;fetch_array(); // Obtemos o primeiro rexistro&lt;br /&gt;
$produto = $stock[&amp;#039;produto&amp;#039;]; // Ou tamén $stock[0];&lt;br /&gt;
$unidades = $stock[&amp;#039;unidades&amp;#039;]; // Ou tamén $stock[1];&lt;br /&gt;
print &amp;quot; &amp;lt; p&amp;gt;Produto $produto: $unidades unidades.&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Este comportamento por defecto pódese modificar utilizando un parámetro opcional, que pode tomar os seguintes valores:&lt;br /&gt;
&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;MYSQLI_NUM&amp;#039;&amp;#039;&amp;#039;. Devolve un array con claves numéricas.&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;MYSQLI_ASSOC&amp;#039;&amp;#039;&amp;#039;. Devolve un array asociativo.&lt;br /&gt;
:* &amp;#039;&amp;#039;&amp;#039;MYSQLI_BOTH&amp;#039;&amp;#039;&amp;#039;. É o comportamento por defecto, no que devolve un array con claves numéricas e asociativas.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-assoc.php fetch_assoc]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-assoc.php mysqli_fetch_assoc]&amp;#039;&amp;#039;&amp;#039;). Idéntico a fetch_array pasando como parámetro MYSQLI_ASSOC.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-row.php fetch_row]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-row.php mysqli_fetch_row]&amp;#039;&amp;#039;&amp;#039;). Idéntico a fetch_array pasando como parámetro MYSQLI_NUM.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-object.php fetch_object]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-result.fetch-object.php mysqli_fetch_object]&amp;#039;&amp;#039;&amp;#039;). Similar aos métodos anteriores, pero devolve un obxecto en lugar dun array. As propiedades do obxecto devolto correspóndense con cada un dos campos do rexistro.&lt;br /&gt;
&lt;br /&gt;
Para percorrer todos os rexistros dun array, podes facer un bucle tendo en conta que calquera dos métodos ou funcións anteriores devolverá null cando non haxa máis rexistros no conxunto de resultados.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$resultado = $db-&amp;gt;query(&amp;#039;SELECT produto, unidades FROM stock WHERE unidades&amp;lt;2&amp;#039;);&lt;br /&gt;
$stock = $resultado-&amp;gt;fetch_object();&lt;br /&gt;
while ($stock != null) {&lt;br /&gt;
        print &amp;quot;&amp;lt;p&amp;gt;Produto $stock-&amp;gt;produto: $stock-&amp;gt;unidades unidades.&amp;lt;/p&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
        $stock = $resultado-&amp;gt;fetch_object();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Consultas preparadas ===&lt;br /&gt;
&lt;br /&gt;
Cada vez que se envía unha consulta ao servidor, este debe analizala antes de executala. Algunhas sentenzas SQL, como as que insiren valores nunha táboa, deben repetirse de forma habitual nun programa. Para acelerar este proceso, MySQL admite consultas preparadas. Estas consultas almacénanse no servidor listas para ser executadas cando sexa necesario.&lt;br /&gt;
&lt;br /&gt;
Para traballar con consultas preparadas coa extensión MySQLi de PHP, debes utilizar a &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/class.mysqli-stmt.php clase mysqli_stmt]&amp;#039;&amp;#039;&amp;#039;. Utilizando o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.stmt-init.php stmt_init]&amp;#039;&amp;#039;&amp;#039; da clase mysqli (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli.stmt-init.php mysqli_stmt_init]&amp;#039;&amp;#039;&amp;#039;) obtés un obxecto da devandita clase.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$db = new mysqli(&amp;#039;localhost&amp;#039;, &amp;#039;usuario&amp;#039;, &amp;#039;abc123. &amp;#039; &amp;#039;platega&amp;#039;);&lt;br /&gt;
$consulta = $db-&amp;gt;stmt_init();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Os pasos que debes seguir para executar unha consulta preparada son:&lt;br /&gt;
&lt;br /&gt;
* Preparar a consulta no servidor MySQL utilizando o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.prepare.php prepare]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;mysqli_stmt_prepare&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
* Executar a consulta, tantas veces como sexa necesario, co método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.execute.php execute]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.execute.php mysqli_stmt_execute]&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
* Unha vez que xa non se necesita máis, débese executar o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.close.php close]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.close.php mysqli_stmt_close]&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
&lt;br /&gt;
Por exemplo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$consulta = $db-&amp;gt;stmt_init();&lt;br /&gt;
$consulta-&amp;gt;prepare(&amp;#039;INSERT INTO cursos (cod, nome) VALUES (&amp;quot;G1301006&amp;quot;, &amp;quot;POO para plataformas web con PHP e MySQL&amp;quot;)&amp;#039;);&lt;br /&gt;
$consulta-&amp;gt;execute();&lt;br /&gt;
$consulta-&amp;gt;close();&lt;br /&gt;
$db-&amp;gt;close();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
O problema é que de pouco serve preparar unha consulta de inserción de datos como a anterior, se os valores que insire son sempre os mesmos. Por este motivo as consultas preparadas admiten parámetros. Para preparar unha consulta con parámetros, en lugar de poñer os valores debes indicar cun signo de interrogación a súa posición dentro da sentenza SQL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$consulta-&amp;gt;prepare(&amp;#039;INSERT INTO cursos (cod, nome) VALUES (?, ?) &amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E antes de executar a consulta tes que utilizar o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.bind-param.php bind_param]&amp;#039;&amp;#039;&amp;#039; (ou a función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.bind-param.php mysqli_stmt_bind_param]&amp;#039;&amp;#039;&amp;#039;) para substituír cada parámetro polo seu valor. O primeiro parámetro do método bind_param é unha cadea de texto na que cada carácter indica o tipo dun parámetro, segundo a seguinte táboa.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Caracter !! Tipo do parámetro&lt;br /&gt;
|-&lt;br /&gt;
| I || número entero&lt;br /&gt;
|-&lt;br /&gt;
| D || número real (doble precisión)&lt;br /&gt;
|-&lt;br /&gt;
| S || cadea de texto&lt;br /&gt;
|-&lt;br /&gt;
| B || contido en formato binario (BLOB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Isto é:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$consulta = $db-&amp;gt;stmt_init();&lt;br /&gt;
$consulta-&amp;gt;prepare(&amp;#039;INSERT INTO cursos (cod, nome) VALUES (?, ?)&amp;#039;);&lt;br /&gt;
$cod_produto = &amp;quot;G1301006&amp;quot;;&lt;br /&gt;
$nome_produto = &amp;quot;POO para plataformas web con PHP e MySQL&amp;quot;;&lt;br /&gt;
$consulta-&amp;gt;bind_param(&amp;#039;ss&amp;#039;, $cod_produto, $nome_produto);&lt;br /&gt;
$consulta-&amp;gt;execute();&lt;br /&gt;
$consulta-&amp;gt;close();&lt;br /&gt;
$db-&amp;gt;close();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No caso das consultas que devolven valores, pódese utilizar o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.bind-result.php bind_result]&amp;#039;&amp;#039;&amp;#039; (función &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.bind-result.php mysqli_stmt_bind_result]&amp;#039;&amp;#039;&amp;#039;) para asignar a variables os campos que se obteñen tras a execución. Utilizando o método &amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.fetch.php fetch]&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;[http://docs.php.net/manual/es/mysqli-stmt.fetch.php mysqli_stmt_fetch]&amp;#039;&amp;#039;&amp;#039;) percórrense os rexistros devoltos.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$consulta = $db-&amp;gt;stmt_init();&lt;br /&gt;
$consulta-&amp;gt;prepare(&amp;#039;SELECT produto, unidades FROM stock WHERE unidades&amp;lt;2&amp;#039;);&lt;br /&gt;
$consulta-&amp;gt;execute();&lt;br /&gt;
$consulta-&amp;gt;bind_result($produto, $unidades);&lt;br /&gt;
while($consulta-&amp;gt;fetch()) {&lt;br /&gt;
   print &amp;quot;&amp;lt;p&amp;gt;Produto $produto: $unidades unidades.&amp;lt;/p&amp;gt;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$consulta-&amp;gt;close();&lt;br /&gt;
$db-&amp;gt;close();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Usuario:Vlourido|Víctor Lourido]] 19:10 15 jul 2013 (CEST)&lt;/div&gt;</summary>
		<author><name>Vlourido</name></author>
	</entry>
</feed>