Está en la página 1de 195

Introduccin

La extensin mysqli (mysql improved) permite acceder a la funcionalidad


proporcionada por MySQL 4.1 y posterior. Se puede encontrar ms informacin
sobre el servidor de base de datos MySQL en http://www.mysql.com/
Se puede encontrar informacin general del software disponible para usar MySQL
desde PHP en la Informacin general
La documentacin de MySQL se puede encontrar en http://dev.mysql.com/doc/.
Esta documentacin incluye partes del manual de MySQL con permiso de Oracle
Corporation.

Ejemplos
Todos los ejemplos en la documentacin de mysqli utilizan la base de datos world.
sta se puede encontrar en http://downloads.mysql.com/docs/world.sql.gz
Informacin general

Esta seccin proporciona una introduccin a las opciones disponibles a la hora de


desarrollar una aplicacin PHP que necesite interactuar con una base de datos
MySQL.
Qu es una API?
Una Interfaz de Programacin de Aplicaciones, o API, define las clases, mtodos,
funciones y variables que necesitar llamar una aplicacin para llevar a cabo una
tarea determinada. En el caso de las aplicaciones de PHP que necesitan
comunicarse con un servidor de bases de datos, las APIs necesarias se ofrecen
generalmente en forma de extensiones de PHP.
Las APIs pueden ser procedimentales u orientadas a objetos. Con una API
procedimental invocan funciones para llevar a cabo las tareas, mientras con con
una API orientada a objetos se instancian clases, y entonces se invocan a

mtodos de los objetos creados. Entre ambas opciones, la segunda es


generalmente la va recomendada, puesto que est ms actualizada y conlleva
una mejor organizacin de cdigo.
Cuando se escriben aplicaciones PHP que necesitan conectar a un servidor
MySQL, existen varias opciones disponibles respecto a API. Este documento
abarca esas opciones, y ayuda a elegir la mejor solucin para cada aplicacin.
Qu es un Conector?
En la documentacin de MySQL, el trmino conector hace referencia al software
que permite a una aplicacin conectarse a un servidor de bases de datos MySQL.
MySQL proporciona conectores para ciertos lenguajes, entre ellos PHP.
Si una aplicacin de PHP necesita comunicarse con un servidor de bases de
datos, necesitar escribir el cdigo PHP que realice tareas tales como conectar al
servidor de bases de datos, realizar consultas y otras funciones relacionadas con
bases de datos. Es necesario tener un software instalado en el sistema que
proporcione a la aplicacin en PHP la API, que manejar la comunicacin entre el
servidor de bases de datos y la aplicacin, posiblemente empleando en caso
necesario otras bibliotecas. A este software generalmente se le conoce como
conector, dado que permite a una aplicacin conectar con un servidor de bases de
datos.
Qu es un Driver?
Un driver es un software diseado para comunicarse con un tipo especfico de
servidor de bases de datos. Podra tambin invocar a una biblioteca, como por
ejemplo la Biblioteca Cliente de MySQL o el Driver Nativo de MySQL. Estas
bibliotecas implementan el protocolo de bajo nivel que se utiliza para comunicarse
con el servidor de bases de datos.
A modo de ejemplo, la capa de abstraccin de bases de datos Objetos de Datos
de PHP (PDO) utilizar alguno de los drivers para bases de datos disponibles. Uno
de ellos es el driver PDO MYSQL, que permite comunicarse con un servidor
MySQL.

A menudo la gente utiliza los trminos conector y driver indistintamente. Esto


puede dar lugar a confusin. En la documentacin de MySQL, el trmino "driver"
queda reservado para el software que proporciona la parte especfica de una base
de datos dentro de un conector.
Qu es una Extensin?
En la documentacin de PHP aparece otro trmino - extensin. El cdigo fuente de
PHP consiste por un lado de un ncleo, y por otro de extensiones opcionales para
el ncleo. Las extensiones de PHP relacionadas con MySQL, tales como mysqli,
y mysql, estn implementadas utilizando el framework de extensiones de PHP.
Tpicamente, una extensin ofrece una API al programador de PHP para permitirle
hacer uso de sus utilidades mediante cdigo. Sin embargo, algunas de las
extensiones que utilizan el framework de extensiones de PHP no ofrecen ninguna
API al programador.
La extensin del driver PDO MySQL, por ejemplo, no proporciona ninguna API al
programador PHP, pero en su lugar ofrece una interfaz a la capa de PDO que tiene
por encima.
No deben confundirse los trminos API y extensin, dado que una extensin no
debe necesariamente proporcionar una API al programador.
Cules son las principales APIs que PHP ofrece para utilizar MySQL?
Hay tres APIs principales a la hora de considerar conectar a un servidor de bases
de datos MySQL:
o

Extensin MySQL de PHP

Extensin mysqli de PHP

Objetos de Datos de PHP (PDO)

Cada una tiene sus ventajas e inconvenientes. El siguiente apartado trata de dar
una breve introduccin a los aspectos clave de cada API.

Qu es la Extensin MySQL de PHP?


Esta es la extensin original diseada que permite desarrollar aplicaciones PHP
que interactan con bases de datos MySQL. La extensinmysql proporciona una
interfaz procedural, y est pensada para usar slo con versiones de MySQL
anteriores a la 4.1.3. Si bien esta extensin se puede utilizar con versiones de
MySQL 4.1.3 o posteriores, no estarn disponibles todas las nuevas
funcionalidades del servidor MySQL.
Nota:
Si se utiliza una versin de MySQL 4.1.3 o posterior, se
recomienda encarecidamente utilizar la extensin mysqli en su lugar.
El cdigo fuente de la extensin mysql se encuentra en el directorio de extensiones
de PHP ext/mysql.
Para ms informacin sobre la extensinmysql, revise MySQL (Original).
Qu es la extensin mysqli de PHP?
La extensin mysqli, o como a veces se le conoce, la extensin de
MySQL mejorada, se desarroll para aprovechar las nuevas funcionalidades
encontradas en los sistemas MySQL con versin 4.1.3 o posterior. La
extensin mysqli viene incluida en las versiones PHP 5 y posteriores.
La extensin mysqli contiene numerosos beneficios, siendo estas las mejoras
principales respecto a la extensin mysql:
o

Interfaz orientada a objetos

Soporte para Declaraciones Preparadas

Soporte para Mltiples Declaraciones

Soporte para Transacciones

Mejoradas las opciones de depuracin

Soporte para servidor empotrado

Nota:
Si utiliza MySQL versin 4.1.3 o superior, se recomienda encarecidamente utilizar
esta extensin.
Adems de la interfaz orientada a objetos, esta extensin tambin proporciona una
interfaz procedural.
La extensin mysqli est desarrollada mediante el framework de extensiones de
PHP. Su cdigo fuente se ubica en el directorio ext/mysqli.
Para ms informacin sobre la extensin mysqli, revise MySQLi.
Qu es PDO?
Los Objetos de Datos de PHP, o PDO, son una capa de abstraccin de bases de
datos especficas para aplicaciones PHP. PDO ofrece una API homognea para
las aplicaciones PHP, independientemente del tipo de servidor de bases de datos
con el que se vaya a conectar la aplicacin. En teora, si se utiliza la API PDO, se
podra cambiar el servidor de bases de datos en uso, por ejemplo de Firebird a
MySQL, y slo se necesitaran algunos cambios menores en el cdigo PHP.
Otros ejemplos de capas de abstraccin de bases de datos son JDBC para
aplicaciones Java o DBI para Perl.
A pesar de que PDO tiene sus ventajas, tales como una API limpia, sencilla y
portable, su mayor inconveniente es que no permite utilizar todas las
funcionalidades avanzadas en la ltima versin del servidor MySQL. Por ejemplo,
PDO no permite hacer uso de las Declaraciones Mltiples de MySQL.
PDO est desarrollado utilizando el framework de extensiones de PHP. Su cdigo
fuente se ubica en el directorio ext/pdo.
Para ms informacin de PDO, revise PDO.
Qu es el driver PDO MYSQL?

El driver PDO MYSQL no es una API en s, al menos desde el punto de vista del
programador de PHP. En realidad, el driver PDO MYSQL se encuentra una capa
por debajo del propio PDO, y ofrece funcionalidades especficas de MySQL. Si
bien el programador realiza las llamadas a la API de PDO, PDO utiliza el driver
PDO MYSQL para llevara a cabo la comunicacin con el servidor MySQL.
El driver PDO MYSQL es uno de los muchos drivers PDO disponibles. Otros de los
drivers disponibles son los de los servidores de bases de datos Firebird y
PostgreSQL.
El driver MYSQL PDO est desarrollado utilizando el framework de extensiones de
PHP. Su cdigo fuente est ubicado en el directorio ext/pdo_mysql. No ofrece
ninguna API al programador PHP.
Para ms informacin sobre el driver PDO MYSQL, revise MySQL (PDO).
Qu es el Driver Nativo de MySQL?
Tanto la extensin mysql, como mysqli, y el driver PDO MYSQL, utilizan para llevar
a cabo las comunicaciones con el servidor de bases de datos MySQL una
biblioteca de bajo nivel que genera el protocolo necesario. Hace un tiempo, la
nica biblioteca disponible eralibmysqlclient.
Sin embargo, la interfaz que ofrece libmysqlclient no estaba optimizada para
comunicarse con aplicaciones PHP, dado que libmysqlclient se desarroll
originalmente teniendo en mente aplicacines hechas en C. Por esta razn, se
desarroll el Driver Nativo de MySQL, mysqlnd, como una alternativa
a libmysqlclient para las aplicaciones en PHP.
Tanto la extensin mysql, como la extensin mysqli y el driver PDO MySQL, se
pueden configurar por separado para utilizar o bienlibmysqlclient o bien mysqlnd.
Dado que mysqlnd fue desarrollado especficamente para ser utilizado en sistemas
PHP, tiene numerosas mejoras en cuanto a uso de memoria y velocidad respecto
a libmysqlclient. Se recomienda encarecidamente hacer uso de dichas mejoras.
Nota:

El Controlador Nativo de MySQL slo puede usarse con servidores de MySQL


versiones 4.1.3 y posteriores.
El Driver Nativo de MySQL est desarrollado utilizando el framework de
extensiones de PHP. El cdigo fuente se ubica en ext/mysqlnd. No ofrece ninguna
API al programador de PHP.
Comparacin de Funcionalidades
La siguiente tabla compara las funcionalidades de los tres principales mtodos
para conectar a MySQL desde PHP:
Comparacin de las opciones de la API de MySQL para PHP
PDO (Usando el driver

Extensin

PDO MySQL y el Driver

MySQL de

Nativo MySQL)

PHP

5.0

5.0

Antes de 3.0

Includo con PHP 5.x

Estado de desarrollo de

Desarrollo activo Desarrollo activo, desde

Extensin
mysqli de PHP
Versin de PHP en que se
introdujo

MySQL

Slo se le

PHP 5.3

mantiene

No

Recomendado por MySQL

S - opcin

para nuevos proyectos

recomendada

Soporte para juegos de

No

Soporte para Declaraciones S

No

No

caracteres

Preparadas en el lado del


servidor
Soporte para Declaraciones No
Preparadas en el lado del

Comparacin de las opciones de la API de MySQL para PHP

Extensin
mysqli de PHP

PDO (Usando el driver

Extensin

PDO MySQL y el Driver

MySQL de

Nativo MySQL)

PHP

No

Mayormente

No

Mayormente

No

cliente

Soporte para

Procedimientos
Almacenados
Soporte para Declaraciones S
Mltiples
Suporte para todas las

funcionalidades de MySQL
4.1+

Interfaz dual: procedimental y orientada a objetos

La extensin mysqli ofrece una interfaz dual. Soporta el paradigme de


programacin procedimental y el orientado a objetos.
Los usuarios que migren desde la extensin mysql antigua pueden preferir la
interfaz procedimental. Esta interfaz es similar a la de la extensin antigua de
mysql. En la mayora de los casos, los nombres de funciones difieren nicamente
por el prefijo. Algunas funciones de mysqli toman como primer argumento un
gestor de conexin, mientras que las funciones similares de la antigua interfaz de
mysql lo toman como el ltimo argumento opcional.
Ejemplo #1 Migracin sencilla desde la antigua extensin mysql
<?php
$mysqli = mysqli_connect("ejemplo.com", "usuario", "contrasea", "basedat
os");
$resultado = mysqli_query($mysqli, "SELECT 'Por favor, no use ' AS _msg F

ROM DUAL");
$fila = mysqli_fetch_assoc($resultado);
echo $fila['_msg'];
$mysql = mysql_connect("ejemplo.com", "usuario", "contrasea");
mysql_select_db("test");
$resultado = mysql_query("SELECT 'la extensin mysql para nuevos desarrol
los.' AS _msg FROM DUAL", $mysql);
$fila = mysql_fetch_assoc($resultado);
echo $fila['_msg'];
?>

El resultado del ejemplo sera:


Por favor, no use la extensin mysql para nuevos desarrollos.

La interfaz orientada a objetos


Adems de la clsica interfaz procedimental, los usuarios pueden optar por usar la
interfaz orientada a objetos. La documentacin est organizada segn la interfaz
orientada a objetos. Esta interfaz muestra las funciones agrupadas por su
propsito, haciendo ms fcil los comienzos. La seccin de referencia proporciona
ejemplos para ambas variantes de sintaxis.
No existen diferencias significativas de rendimiento entre las dos interfaces. Los
usuarios puede basar su eleccin en sus preferencias personales.
Ejemplo #2 Interfaz orientada a objetos y procedimental
<?php
$mysqli = mysqli_connect("ejemplo.com", "usuario", "contrasea", "basedat
os");
if (mysqli_connect_errno($mysqli)) {
echo "Fallo al conectar a MySQL: " . mysqli_connect_error();
}
$resultado = mysqli_query($mysqli, "SELECT 'Un mundo lleno de ' AS _msg F
ROM DUAL");

$fila = mysqli_fetch_assoc($resultado);
echo $fila['_msg'];
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fallo al conectar a MySQL: " . $mysqli->connect_error;
}
$resultado = $mysqli->query("SELECT 'elecciones para complacer a todos.'
AS _msg FROM DUAL");
$fila = $resultado->fetch_assoc();
echo $fila['_msg'];
?>

El resultado del ejemplo sera:


Un mundo lleno de elecciones para complacer a todos.

Se usa la interfaz orientada a objetos en el inicio rpido porque la seccin de


referencia est organizada de esta manera.
Mezclar estilos
Es posible cambiar entre los estilos en cualquier momento. No se recomienda
mezclar los dos estilos por razones de claridad y estilo de cdigo.
Ejemplo #3 Estilo de codificacin malo
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fallo al contenctar a MySQL: " . $mysqli->connect_error;
}
$resultado = mysqli_query($mysqli, "SELECT 'Estilo malo pero posible.' AS
_msg FROM DUAL");

if (!$resultado) {
echo "Fallo al ejecutar la consulta: (" . $mysqli->errno . ") " . $my
sqli->error;
}
if ($fila = $resultado->fetch_assoc()) {
echo $fila['_msg'];
}
?>

El resultado del ejemplo sera:


Estilo malo pero posible.

Conexiones

El servidor MySQL soporta el uso de diferentes capas de transporte para


conexiones. Las conexiones usan TCP/IP, sockets de dominio Unix o tuberas con
nombre de Windows.
El nombre del host localhost tiene un significado especial. Est vinculado al uso de
sockets de dominio Unix. No es posible abrir una conexin TCP/IP usando como
nombre de host localhost, se debe usar 127.0.0.1 en su lugar.
Ejemplo #1 Significado especia de localhost
<?php
$mysqli = new mysqli("localhost", "usuario", "contrasea", "basedatos");
if ($mysqli->connect_errno) {
echo "Fallo al contenctar a MySQL: (" . $mysqli->connect_errno . ") "
. $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";
$mysqli = new mysqli("127.0.0.1", "usuario", "contrasea", "basedatos", 3

306);
if ($mysqli->connect_errno) {
echo "Fallo al contenctar a MySQL: (" . $mysqli->connect_errno . ") "
. $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";
?>

El resultado del ejemplo sera:


Localhost via UNIX socket
127.0.0.1 via TCP/IP

Valores predeterminados de los parmetros de conexin


Dependiendo de la funcin de conexin usada se pueden omitir varios parmetros.
Si no se proporciona un parmetro, la extensin intentar usar los valores
predeterminados que estn establecidos en el fichero de configuracin de PHP.
Ejemplo #2 Configuracin predeterminada
mysqli.default_host=192.168.2.27
mysqli.default_user=root
mysqli.default_pw=""
mysqli.default_port=3306
mysqli.default_socket=/tmp/mysql.sock

Los valores resultantes de los parmetros son pasados a la biblioteca cliente que
est usando esta extensin. Si la biblioteca cliente detecta parmetros vacos o no
establecidos, puede usar los valores internos predeterminados de la biblioteca.
Valores predeterminados internos de conexin de la biblioteca
Si el valor del host no est establecido o est vaco, la biblioteca cliente usar una
conexin de socket Unix sobre localhost. Si el socket no est establecido o est
vaco, y es solicitada una conexin de socket Unix, se intentar una conexinal
socket predeterminado de/tmp/mysql.sock.

En sistemas Windows, el nombre de host . es interpretado por la biblioteca cliente


como un intento de abrir una conexin basada en una tubera con nombre de
Windows. En este caso el parmetro del socket se interpreta como el nombre de la
tubera. Si no se proporciona o est vaco, se usar como socket (nombre de la
tubera) \\.\pipe\MySQL.
Si no est establecida una conexin basada en un socket de dominio Unix ni en
una tubera con nombre de Windows y el valor del parmetro del puerto no est
establecido, la biblioteca usuar como puerto predeterminado el 3306.
La biblioteca mysqlnd y la Biblioteca Cliente de MySQL (libmysqlclient)
implementan la misma lgica para determinados valores predeterminados.
Opciones de conexin
Las opciones de conexin estn disponibles para, por ejemplo, establecer
comando iniciales que son ejecutados sobre la conexin, o para solicitar el uso de
ciertos conjuntos de caracteres. Las opciones de conexin deben ser establecidas
antes de que se establezcla una conexin de red.
Para configurar una opcin de conexin, la operacin de conexin ha de ser
realizada en tres pasos: crear un gestor de conexin conmysqli_init(), establecer
las opciones solicitadas usando mysqli_options(), y establecer la conexin de red
con mysqli_real_connect().
Cach de conexiones
La extensin mysqli soporta conexiones persistentes a bases de datos, las cuales
son un tipo especial de conexiones almacenadas en cach. Por defecto, cada
conexin a una base de datos abierta por un script es cerrada explcitamente por
el usuario durante el tiempo de ejecucin o liberada automticamente al finalizar el
script. Una conexin persistente no. En su lugar, se coloca en una cach para su
reutilizacin posterior, si una conexin es abierta al mismo servidor usando el
mismo nombre de usuario, contrasea, socket, puerto y base de datos
predeterminada. La reutilizacin ahorra gastos de conexio.

Cada procesos de PHP utiliza su propia cach de conexiones mysqli.


Dependiendo de modelo de distribucin del servidor web, un proceso PHP puede
servir una o mltiples peticiones. Por lo tanto, una conexin almacenada en cach
puede ser utilizada posteriormente por uno o ms scripts.
Conexiones persistentes
Si una conexin persistente no usada con una combiacin dada de host, nombre
de usuario, contrasea, socket, puerto y base de datos predeterminada no se
puede encontrar en la cach de conexiones, mysqli abrir una nueva conexin. El
uso de conexiones persistentes se puede habilitar y deshabilitar usando la
directiva de PHP mysqli.allow_persistent. El nmero total de conexiones abiertas
por un script puede ser limitado con mysqli.max_links. El nmero mximo de
conexiones persistentes por proceso de PHP puede restringirse
conmysqli.max_persistent. Observe que el servidor web puede engendrar muchos
procesos de PHP.
Una queja comn sobre las conexiones persistentes qes que su estado no es
reiniciado antes de su uso. Por ejemplo, las transacciones abiertas y no finalizadas
no son automticamente reanudadas. Tambin, los cambios de autorizacin que
ocurran durante la colocacin de la conexin en la cach y su reutilizacin no
estn reflejados. Esto puede verse como un efecto secundario no deseado. Al
contrario, el nombre persistente puede entenderse como una promesa de que el
estado persiste.
La extensin mysqli soporta ambas interpretaciones de una conexin persistente:
el estado persiste, y el estado se reinicia antes de la reutilizacin. Lo
predeterminado es la reiniciacin. Antes de que una conexin sea reutilizada, la
extensin llama implicitamente amysqli_change_user() para reiniciar el estado. La
conexin persistente aparece al usuario como si estuviera recin abierta. No son
visibles ningn artefacto de los usos previos.
La funcin mysqli_change_user() es una operacin cara. Para un mejor
rendimiento, los usuarios pueden recompilar la extensin con la bandera de
compilacin MYSQLI_NO_CHANGE_USER_ON_PCONNECT establecida.

Corresponde al usuario elegir entre comportamiento seguro o mejor rendimiento.


Ambas son metas de optimizacin vlidas. Para facilitar el uso, el comportamiento
seguro es el predeterminado a expensas de un rendimiento mximo.

Ejecutar sentencias

Las sentencias se pueden ejecutar con las


funciones mysqli_query(), mysqli_real_query() y mysqli_multi_query(). La
funcin mysqli_query()es la ms comn, y combina la sentencia de ejecucucin
con su conjunto de resultados obtenido de un buffer, si lo hubiera, en una llamada.
Llamar a mysqli_query() es idntico que llamar a mysqli_real_query() seguido
de mysqli_store_result().
Ejemplo #1 Conectando a MySQL
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin con MySQL: (" . $mysqli->connect_errno . ") "
. $mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT)") ||
!$mysqli->query("INSERT INTO test(id) VALUES (1)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
?>

Conjuntos de resultados almacenados en buffer

Despus de la ejecucin de sentencias, los resultados pueden recuperarse de una


sola vez para que sean almacenados en buffer por el cliente o leyendo fila a fila. El
almacenamieno en buffer de conjuntos de resultados en el lado del cliente permite
al servidor liberar recursos asociados con los resultados de la sentencia tan pronto
como sea posible. Generalmente hablando, los clientes son lentos consumiendo
conjuntos de resultados. Por lo tanto, se recomienda usar conjuntos de resultados
almacenados en buffer. mysqli_query() combina la ejecucin de sentencias y el
almacenamiento en buffer de conjuntos de resultados.
Las aplicaciones de PHP pueden navegar libremente a travs de resultados
almacenados en buffer. La navegacin es ms rpida debido a que los conjuntos
de resultados se mantienen en la memoria del cliente. Tenga en cuenta que a
menudo es ms fcil procesar datos en el cliente que hacerlo el servidor.
Ejemplo #2 Navegacin a travs de resultados almacenados en buffer
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT)") ||
!$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
$resultado = $mysqli->query("SELECT id FROM test ORDER BY id ASC");
echo "Orden inverso...\n";
for ($num_fila = $resultado->num_rows - 1; $num_fila >= 0; $num_fila--) {
$resultado->data_seek($num_fila);

$fila = $resultado->fetch_assoc();
echo " id = " . $fila['id'] . "\n";
}
echo "Orden del conjunto de resultados...\n";
$resultado->data_seek(0);
while ($fila = $resultado->fetch_assoc()) {
echo " id = " . $fila['id'] . "\n";
}
?>

El resultado del ejemplo sera:


Orden inverso...
id = 3
id = 2
id = 1
Orden del conjunto de resultados...
id = 1
id = 2
id = 3

Conjuntos de resultados no almacenados en buffer


Si la memoria del cliente es un recurso escaso y no es necesaria la liberacin de
recursos del servidor tan pronto como sea posible para mantener la carga del
servidor baja, se pueden usar conjuntos de resultados no almacenados en buffer.
Recorrer resultados no almacenados en buffer no es posible antes de que todas
las filas hayan sido ledas.
Ejemplo #3 Navegacin a travs de resultados no almacenados en buffer
<?php
$mysqli->real_query("SELECT id FROM test ORDER BY id ASC");
$resultado = $mysqli->use_result();
echo "Orden del conjunto de resultados...\n";
while ($fila = $resultado->fetch_assoc()) {

echo " id = " . $fila['id'] . "\n";


}
?>

Tipos de datos de los valores del conjunto de resultados


Las funciones mysqli_query(), mysqli_real_query() y mysqli_multi_query() se usan
para ejecutar sentencias no preparadas. Al nivel del Protocolo Cliente Servidor de
MySQL, el comando COM_QUERY y el protocolo de texto se usan para la
ejecucin de sentencias. Con el protocolo texto, el servidor MySQL convierte todos
los datos de los conjuntos de resultados en cadenas antes de enviarlos. Esta
conversin se realiza sin considerar el tipo de datos de las columnas del conjunto
de resultados SQL. Las bibliotecas cliente de mysql reciben todos los valores de
las columnas como cadenas. No se realiza ninguna conversin del lado del cliente
pava volver a convertir las columnas a susu tipos nativos. En su lugar, todos los
valores son proporcionados como cadenas de PHP.
Ejemplo #4 El protocolo de texto devuelve cadenas de manera predeterminado
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT, etiqueta CHAR(1))") ||
!$mysqli->query("INSERT INTO test(id, etiqueta) VALUES (1, 'a')")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
$resultado = $mysqli->query("SELECT id, etiqueta FROM test WHERE id = 1
");
$fila = $resultado->fetch_assoc();

printf("id = %s (%s)\n", $fila['id'], gettype($fila['id']));


printf("etiqueta = %s (%s)\n", $fila['etiqueta'], gettype($fila['etiqueta
']));
?>

El resultado del ejemplo sera:


id = 1 (string)
etiqueta = a (string)

Es posible convertir valores de columnas de tipo integer y float a nmeros de PHP


estableciendo la opcin de conexinMYSQLI_OPT_INT_AND_FLOAT_NATIVE, si se esta
utilizando la biblioteca mysqlnd. Si se establece, la biblioteca mysqlnd comprobar
los tipos de columna de los metadatos del conjunto de resultados y convertir las
columnas nmerocas de SQL a nmeros de PHP, si el rango de valores del tipo de
datos de PHP lo permite. De esta forma, por ejemplo, las columnas INT de SQL
son devueltas como enteros.
Ejemplo #5 Tipos de datos nativos con mysqlnd y la opcin de conexin
<?php
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
$mysqli->real_connect("ejemplo.com", "user", "contrasea", "basedatos");
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT, etiqueta CHAR(1))") ||
!$mysqli->query("INSERT INTO test(id, etiqueta) VALUES (1, 'a')")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}

$resultado = $mysqli->query("SELECT id, etiqueta FROM test WHERE id = 1


");
$fila = $resultado->fetch_assoc();
printf("id = %s (%s)\n", $fila['id'], gettype($fila['id']));
printf("etiqueta = %s (%s)\n", $fila['etiqueta'], gettype($fila['etiqueta
']));
?>

El resultado del ejemplo sera:


id = 1 (integer)
etiqueta = a (string)

Sentencias Preparadas

Las bases de datos MySQL soportan sentencias preparadas. Una sentencia


preparada o una sentencia parametrizada se usa para ejecutar la misma sentencia
repetidamente con gran eficiencia.
Flujo de trabajo bsico
La ejecucin de sentencias preparadas consiste en dos etapas: la preparacin y la
ejecucin. En la etapa de preparacin se enva una plantilla de sentencia al
servidor de bases de datos. El servidor realiza una comprobacin de sintaxis e
inicializa los recursos internos del servidor para su uso posterior.
El servidor de MySQL soporta el uso de parmetros de sustitucin posicionales
annimos con ?.
Ejemplo #1 Primera etapa: prepacin
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {

echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .


$mysqli->connect_error;
}
/* Sentencia no preparada */
if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli>query("CREATE TABLE test(id INT)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
/* Sentencia preparada, etapa 1: preparacin */
if (!($sentencia = $mysqli->prepare("INSERT INTO test(id) VALUES (?)")))
{
echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli>error;
}
?>

La preparacin es seguida de la ejecucin. Durante la ejecucin el cliente vincula


los valores de los parmetros y los enva al servidor. El servidor crea una
sentencia desde la plantilla de la sentencia y los valores vinculados para ejecutarla
usando los recursos internos previamente creados.
Ejemplo #2 Segunda etapa: vincular y ejecutar
<?php
/* Sentencia preparada, etapa 2: vincular y ejecutar */
$id = 1;
if (!$sentencia->bind_param("i", $id)) {
echo "Fall la vinculacin de parmetros: (" . $sentencia->errno . ")
" . $sentencia->error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentencia>error;

}
?>

Ejecucin repetida
Una sentencia preparada se puede ejecutar repetidamente. En cada ejecucin el
valor actual de la variable vinculada se evala y se enva al servidor. La sentencia
no se analiza de nuevo. La plantilla de la sentencia no es transferida otra vez al
servidor.
Ejemplo #3 INSERT preparada una vez, ejecutada mltiples veces
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
/* Sentencia no preparada */
if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli>query("CREATE TABLE test(id INT)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
/* Sentencia preparada, etapa 1: preparacin */
if (!($sentencia = $mysqli->prepare("INSERT INTO test(id) VALUES (?)")))
{
echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli>error;
}
/* Sentencia preparada, etapa 2: vinculacin y ejecucin */
$id = 1;
if (!$sentencia->bind_param("i", $id)) {

echo "Fall la vinculacin de parmetros: (" . $sentencia->errno . ")


" . $sentencia->error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentencia>error;
}
/* Sentencia preparada: ejecucin repetida, slo datos transferidos desde
el cliente al servidor */
for ($id = 2; $id < 5; $id++) {
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $senten
cia->error;
}
}
/* se recomienda el cierre explcito */
$sentencia->close();
/* Sentencia no preparada */
$resultado = $mysqli->query("SELECT id FROM test");
var_dump($resultado->fetch_all());
?>

El resultado del ejemplo sera:


array(4) {
[0]=>
array(1) {
[0]=>
string(1) "1"
}
[1]=>
array(1) {

[0]=>
string(1) "2"
}
[2]=>
array(1) {
[0]=>
string(1) "3"
}
[3]=>
array(1) {
[0]=>
string(1) "4"
}
}

Cada sentencia preparada ocupa recursos del servidor. Las sentencias deberan
cerrarse explcitamente inmediatamente despus de su uso. Si no se realiza
explcitamente, la sentencia ser cerrada cuando el gestor de la sentencia sea
liberado por PHP.
Usar una sentencia preparada no es siempre la manera ms eficiente de ejecutar
una sentencia. Una sentencia preparada ejecutada una sola vez causa ms viajes
de ida y vuelta desde el cliente al servidor que una sentencia no preparada. Es por
esta razn por lo que SELECT no se ejecuta arriba como una sentencia
preparada.
Tambin se ha de considerar el uso de la sintaxis SQL multi-INSERT de MySQL
para sentencias INSERT. Por ejemplo, multi-INSERT requiere menos viajes de ida
y vuelta entre el servidor y el cliente que la sentencia preparada mostrada arriba.
Ejemplo #4 Menos viajes de ida y vuelta usando SQL multi-INSERT
<?php
if (!$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3), (4)")) {
echo "Fall multi-INSERT: (" . $mysqli->errno . ") " . $mysqli>error;
}
?>

Tipos de datos de los valores del conjunto de resultados


El Protocolo Cliente Servidor de MySQL define un protocolo de transporte de datos
diferente para sentencias preparadas y no preparadas. Las sentencias preparadas
usan el llamado protocolo binario. El servidor de MySQL enva los datos del
conjunto de resultados "tal cual" en formato binario. Los resultados no son
serializados en cadenas antes del envo. Las bibliotecas cliente no reciben
cadenas solamente. En su lugar, recibirn datos binarios e intentarn convertir los
valores a los tipos de datos de PHP apropiados. Por ejemplo, los resultados de
una columna de SQL INT sern proporcionados como variables de tipo integer de
PHP.
Ejemplo #5 Tipos de datos nativos
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT, etiqueta CHAR(1))") ||
!$mysqli->query("INSERT INTO test(id, etiqueta) VALUES (1, 'a')")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
$sentencia = $mysqli->prepare("SELECT id, etiqueta FROM test WHERE id = 1
");
$sentencia->execute();
$resultado = $sentencia->get_result();
$fila = $resultado->fetch_assoc();
printf("id = %s (%s)\n", $fila['id'], gettype($fila['id']));

printf("etiqueta = %s (%s)\n", $fila['etiqueta'], gettype($fila['etiqueta


']));
?>

El resultado del ejemplo sera:


id = 1 (integer)
etiqueta = a (string)

Este comportamiento difiere de las sentencias no preparadas. Por defecto, las


sentencias no preparadas devolvern todos los resultados como cadenas. Este
comportamiento predeterminado se puede cambiar usand una opcin de conexin.
Si se utiliza la opcin de conexin no existirn diferencias.
Obtener resultados usando variables vinculadas
Los resultados de las sentencias preparadas pueden ser recuperados mediante
varibles de salida vinculadas, o por la peticin de un objetomysqli_result.
Las variables de salida deben ser vinculadas despus de la ejecucin de la
sentencia. Una variable debe estar vinculada para cada columna del conjunto de
resultados de las sentencias.
Ejemplo #6 Vinculacin de variables de salida
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT, etiqueta CHAR(1))") ||
!$mysqli->query("INSERT INTO test(id, etiqueta) VALUES (1, 'a')")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}

if (!($sentencia = $mysqli->prepare("SELECT id, etiqueta FROM test"))) {


echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli>error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $mysqli->errno . ") " . $mysqli>error;
}
$id_salida

= NULL;

$etiqueta_salida = NULL;
if (!$sentencia->bind_result($id_salida, $etiqueta_salida)) {
echo "Fall la vinculacin de los parmetros de salida: (" . $sentenc
ia->errno . ") " . $sentencia->error;
}
while ($sentencia->fetch()) {
printf("id = %s (%s), etiqueta = %s (%s)\n", $id_salida, gettype($id_
salida), $etiqueta_salida, gettype($etiqueta_salida));
}
?>

El resultado del ejemplo sera:


id = 1 (integer), etiqueta = a (string)

Las sentencias preparadas devuelven de manera predeterminada conjuntos de


resultados no almacenados en buffer. Los resultados de la sentencia no son
obtenidas y transferidas implcitamente desde el servidor al cliente para el
almacenamiento en buffer de lado del cliente. El conjunto de resultados toma
recursos del servidor hasta que todos los resultados hayan sido obtenidos por el
cliente. Por lo que se recomienda consumir resultados cuando sea oportuno. Si un
cliente falla al obtener todos los resultados o el cliente cierra la consulta antes de
haber obtenido todos los datos, los datos han de ser obtenidos implcitamente
por mysqli.

Tambin es posible almacenar en buffer los resutados de una sentencia preparada


usando mysqli_stmt_store_result().
Obtener los resultados usando la interfaz mysqli_result
En lugar de usar resultados vinculados, los resultados tambin se pueden
recuperar a travs de la interfaz mysqli_result.mysqli_stmt_get_result() devuelve
un conjunto de resultados almacenado en buffer.
Ejemplo #7 Usar mysqli_result para obtener los resultados
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT, etiqueta CHAR(1))") ||
!$mysqli->query("INSERT INTO test(id, etiqueta) VALUES (1, 'a')")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
if (!($sentencia = $mysqli->prepare("SELECT id, etiqueta FROM test ORDER
BY id ASC"))) {
echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli>error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentenci
a->error;
}

if (!($resultado = $sentencia->get_result())) {
echo "Fall la obtencin del conjunto de resultados: (" . $sentencia>errno . ") " . $sentencia->error;
}
var_dump($resultado->fetch_all());
?>

El resultado del ejemplo sera:


array(1) {
[0]=>
array(2) {
[0]=>
int(1)
[1]=>
string(1) "a"
}
}

Usar la interfaz mysqli_result ofrece el beneficio adicional de la navegacin flexible


del conjunto de resultados en el lado del cliente.
Ejemplo #8 Conjunto de resultados almacenado en buffer para la lectura flexible
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT, etiqueta CHAR(1))") ||
!$mysqli->query("INSERT INTO test(id, etiqueta) VALUES (1, 'a'), (2,
'b'), (3, 'c')")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my

sqli->error;
}
if (!($sentencia = $mysqli->prepare("SELECT id, etiqueta FROM test"))) {
echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli>error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentenci
a->error;
}
if (!($resultado = $sentencia->get_result())) {
echo "Fall la obtencin del conjunto de resultados: (" . $sentencia>errno . ") " . $sentencia->error;
}
for ($num_fila = ($resultado->num_rows - 1); $num_fila >= 0; $num_fila--)
{
$resultado->data_seek($num_fila);
var_dump($resultado->fetch_assoc());
}
$resultado->close();
?>

El resultado del ejemplo sera:


array(2) {
["id"]=>
int(3)
["etiqueta"]=>
string(1) "c"
}
array(2) {
["id"]=>

int(2)
["etiqueta"]=>
string(1) "b"
}
array(2) {
["id"]=>
int(1)
["etiqueta"]=>
string(1) "a"
}

Escape de valores e inyeccin SQL


Las variables vinculadas son enviadas desde la consulta al servidor por separado,
por lo que no se puede interferir. El servidor usa estos valores directamente en el
momento de la ejecucin, despus de haber analizado la plantilla de la sentencia.
Los parmetros vinculados no necesitan ser escapados porque nunca son
sustituidos directamente dentro del string de consulta. Se puede proporcionar una
sugerencia al servidor para el tipo de variable vinculada, para crear una conversin
apropiada. Vase la funcin mysqli_stmt_bind_param() para ms informacin.
A veces, tal separacin es considerada como la nica caracterstica de seguridad
para evitar inyecciones SQL, pero se puede alcanzar el mismo grado de seguridad
con sentencias no preparadas, si todos los valores estn formateados
correctamente. Debera observarse que el formateo correcto no es lo mismo que
usar escapes, y que involucra ms lgica que simplemente usar escapes. Por lo
tanto, las sentencias preparadas son sencillamente una estrategia ms
conveniente y menos propensa a errores para este elemetno de seguridad de
bases de datos.
Emulacin de sentencias preparadas en el lado del cliente
La API no inclye la emulacin para sentencias preparadas en el lado del cliente.
Comparacin entre sentencias preparadas y no preparadas
La tabla de abajo compara las sentencias preparadas y no preparadas del lado del
servidor.

Comparacin entre sentencias preparadas y no preparad


Sentencia preparada
Viajes de ida y vuelta desde el cliente al servidor, 2

SELECT, ejecucin nica


Cadenas de sentencias tranferidas desde el

cliente al servidor
Viajes de ida y vuelta desde el cliente al servidor, 1 + n

SELECT, ejecucin repetida (n)


Cadenas de sentencias tranferidas desde el

1 plantilla, n veces parametro vinculado, si existe

API de vinculacin de parmetros de entrada

S, escape de entradas automtico

API de vinculacin de variables de salida

Soporte para el uso de la API mysqli_result

S, use mysqli_stmt_get_result()

Conjuntos de resultados almacenados en buffer

S, use mysqli_stmt_get_result() o la vinculacin

cliente al servidor

con mysqli_stmt_store_result()
Conjuntos de resultados no almacenados en

S, use la API de vinculacin de salida

buffer

"Sabor" de la transferencia de datos del protocolo Protocolo binario

Cliente Servidor de MySQL


Tipos de datos SQL de los valores del conjunto

Preservados al obtenerlos

de resultados
Soporta todas las sentencia SQL

Versiones reciente de MySQL soportan muchas pero no S


todas

Procedimientos almacenados

Las bases de datos de MySQL soportan procedimientos almacenados. Un


procedimiento almacenado es una subrutina almacenada en el catlogo de la base
de datos. Las aplicaciones pueden llamar y ejecutar el procedimiento almacenado.
La sentencia de SQL CALL se usa para ejecutar un procedimiento almacenado.
Parmetros
Los procedimientos almacenados pueden tener parmetros IN, INOUT y OUT,
dependiendo de la versin de MySQL. La interfaz mysqli no tiene una nocin
especial de los diferentes tipos de parmetros.
Parmetro IN
Los parmetros de entrada son proporcionados con la sentencia CALL. Asegrese
de que los valores estn escapados correctamente.
Ejemplo #1 Llamar a un procedimiento almacenado
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli>query("CREATE TABLE test(id INT)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query("CREATE PROCEDURE p(IN id_val INT) BEGIN INSERT INTO
test(id) VALUES(id_val); END;")) {
echo "Fall la creacin del procedimiento almacenado: (" . $mysqli>errno . ") " . $mysqli->error;

}
if (!$mysqli->query("CALL p(1)")) {
echo "Fall CALL: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($resultado = $mysqli->query("SELECT id FROM test"))) {
echo "Fall SELECT: (" . $mysqli->errno . ") " . $mysqli->error;
}
var_dump($resultado->fetch_assoc());
?>

El resultado del ejemplo sera:


array(1) {
["id"]=>
string(1) "1"
}

Parmetro INOUT/OUT
A los valores de los parmetros INOUT/OUT se acceden usando variables de
sesin.
Ejemplo #2 Usar variables de sesin
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p(OUT msg VARCHAR(50)) BEGIN SELECT
"Hola!" INTO msg; END;')) {

echo "Fall la creacin del procedimiento almacenado: (" . $mysqli>errno . ") " . $mysqli->error;
}

if (!$mysqli->query("SET @msg = ''") || !$mysqli->query("CALL p(@msg)"))


{
echo "Fall CALL: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!($resultado = $mysqli->query("SELECT @msg as _p_out"))) {
echo "Fall la obtencin: (" . $mysqli->errno . ") " . $mysqli>error;
}
$fila = $resultado->fetch_assoc();
echo $fila['_p_out'];
?>

El resultado del ejemplo sera:


Hola!

Los desarrolladores de aplicaciones y framework pueden proporcionar una API


ms conveniente usando una mezcla de variables de sesiones e inspeccin del
catlogo de la base de datos. Sin embargo, observe el posible impacto de
rendimiento de una solucin personalizada basada en la inspeccin del catlogo.
Manejar conjuntos de resultados
Los procedimientos almacenados pueden devolver conjuntos de resultados. Los
conjuntos de resultados devueltos desde un procedimiento almacenado no se
pueden obtener correctgamente usando mysqli_query(). La
funcin mysqli_query() combina la ejecucin de la sentencia y la obtencin del
primer conjunto de resultados dentro de un conjunto de resultados almacenado en
buffer, si existe. Sin embargo, existen unos conjuntos de resultados del
procedimiento almacenado ocultos para el usuario que hacen

que mysqli_query() falle al devolver los conjuntos de resultados esperados por el


usuario.
Los conjuntos de resultados devueltos desde un procedimiento almacenado son
obtenidos usando mysqli_real_query() omysqli_multi_query(). Ambas funciones
permiten la obtencin de cualquier nmero de conjuntos de resultados devueltos
por una sentencia, como CALL. El fallo de la obtencin de todos los conjuntos de
resultados devueltos por un procedimiento almacenado causa un error.
Ejemplo #3 Obtener los resultados de procedimientos almacenados
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||
!$mysqli->query("CREATE TABLE test(id INT)") ||
!$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p() READS SQL DATA BEGIN SELECT id
FROM test; SELECT id + 1 FROM test; END;')) {
echo "Fall la creacin del procedimiento almacenado: (" . $mysqli>errno . ") " . $mysqli->error;
}
if (!$mysqli->multi_query("CALL p()")) {
echo "Fall CALL: (" . $mysqli->errno . ") " . $mysqli->error;
}

do {
if ($resultado = $mysqli->store_result()) {
printf("---\n");
var_dump($resultado->fetch_all());
$resultado->free();
} else {
if ($mysqli->errno) {
echo "Store failed: (" . $mysqli->errno . ") " . $mysqli>error;
}
}
} while ($mysqli->more_results() && $mysqli->next_result());
?>

El resultado del ejemplo sera:


--array(3) {
[0]=>
array(1) {
[0]=>
string(1) "1"
}
[1]=>
array(1) {
[0]=>
string(1) "2"
}
[2]=>
array(1) {
[0]=>
string(1) "3"
}
}
---

array(3) {
[0]=>
array(1) {
[0]=>
string(1) "2"
}
[1]=>
array(1) {
[0]=>
string(1) "3"
}
[2]=>
array(1) {
[0]=>
string(1) "4"
}
}

Uso de sentencias preparadas


No es necesario un trato especial al usar la interfaz de sentencias preparadas para
obtener los resultados del mismo procedimiento almacenado de arriba. Las
interfaces de sentencias preparadas y no preparadas son similares. Obserque que
no todas las versioines del servidor de MYSQL pueden soportar la preparacin de
la sentencia SQL CALL.
Ejemplo #4 Procedimientos Almacenados y Sentencias Preparadas
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") ||

!$mysqli->query("CREATE TABLE test(id INT)") ||


!$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||
!$mysqli->query('CREATE PROCEDURE p() READS SQL DATA BEGIN SELECT id
FROM test; SELECT id + 1 FROM test; END;')) {
echo "Fall la creacin del procedimiento almacenado: (" . $mysqli>errno . ") " . $mysqli->error;
}
if (!($sentencia = $mysqli->prepare("CALL p()"))) {
echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli>error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentencia>error;
}
do {
if ($resultado = $sentencia->get_result()) {
printf("---\n");
var_dump(mysqli_fetch_all($resultado));
mysqli_free_result($resultado);
} else {
if ($sentencia->errno) {
echo "Store failed: (" . $sentencia->errno . ") " . $sentenci
a->error;
}
}
} while ($sentencia->more_results() && $sentencia->next_result());
?>

Por supuesto, tamibin est soportado el uso de la API de vinculacin para la


obtencin.
Ejemplo #5 Procedimientos Almacenados y Sentencias Preparadas usando la API
de vinculacin
<?php
if (!($sentencia = $mysqli->prepare("CALL p()"))) {
echo "Fall la preparacin: (" . $mysqli->errno . ") " . $mysqli>error;
}
if (!$sentencia->execute()) {
echo "Fall la ejecucin: (" . $sentencia->errno . ") " . $sentencia>error;
}
do {
$id_out = NULL;
if (!$sentencia->bind_result($id_out)) {
echo "Fall la vinculiacin: (" . $sentencia->errno . ") " . $sen
tencia->error;
}
while ($sentencia->fetch()) {
echo "id = $id_out\n";
}
} while ($sentencia->more_results() && $sentencia->next_result());
?>

Sentencias Mltiples

MySQL permite opcionalmente tener mltiples sentencias en una cadena de


sentencias. El envo de mltiples sentencias de una sola vez reduce los viajes de
ida y vuelta desde el cliente al servidor, pero requiere un manejo especial.

Las sentencias mltiples o multiconsultas deben ser ejecutadas


con mysqli_multi_query(). Las sentencias individuales de la cadena de sentencias
estn serparadas por un punto y coma. Entonces, todos los conjuntos de
resultados devueltos por las sentencias ejecutadas deben ser obtenidos.
El servidor MySQL permite tener sentencias que devuelven conjuntos de
resultados y sentencias que no devuelve conjuntos de resultados en una sentencia
mltiple.
Ejemplo #1 Sentencias mltiples
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli>query("CREATE TABLE test(id INT)")) {
echo "Fall la creacin de la tabla: (" . $mysqli->errno . ") " . $my
sqli->error;
}
$sql = "SELECT COUNT(*) AS _num FROM test; ";
$sql.= "INSERT INTO test(id) VALUES (1); ";
$sql.= "SELECT COUNT(*) AS _num FROM test; ";
if (!$mysqli->multi_query($sql)) {
echo "Fall la multiconsulta: (" . $mysqli->errno . ") " . $mysqli>error;
}
do {
if ($resultado = $mysqli->store_result()) {

var_dump($resultado->fetch_all(MYSQLI_ASSOC));
$resultado->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
?>

El resultado del ejemplo sera:


array(1) {
[0]=>
array(1) {
["_num"]=>
string(1) "0"
}
}
array(1) {
[0]=>
array(1) {
["_num"]=>
string(1) "1"
}
}

Consideraciones de seguridad
Las funciones de la API mysqli_query() y mysqli_real_query() no establecen una
bandera de conexin necesaria para activar las multiconsultas en el servidor. Se
usa una llamada extra a la API para las sentencias mltiples para reducir la
verosimilitud de los ataques de inyecciones SQL accidentales. Un atacante puede
intentar aadir sentencias como ; DROP DATABASE mysql o ; SELECT
SLEEP(999). Si el atacante tiene xito al aadir SQL a la cadena de sentencias
pero no se usa mysqli_multi_query, el servidor no ejecutar la segunda sentencia
SQL inyectada y maliciosa.
Ejemplo #2 Inyeccin SQL
<?php
$mysqli

= new mysqli("ejemplo.com", "usuario", "contrasea", "basedato

s");
$resultado = $mysqli->query("SELECT 1; DROP TABLE mysql.user");
if (!$resultado) {
echo "Error al ejecutar la consulta: (" . $mysqli->errno . ") " . $my
sqli->error;
}
?>

El resultado del ejemplo sera:


Error al ejecutar la consulta: (1064) You have an error in your SQL
syntax;
check the manual that corresponds to your MySQL server version for the
right syntax
to use near 'DROP TABLE mysql.user' at line 1

Sentencias preparadas
El uso de sentencias mltiples con sentencias preparadas no est soportado.

Soporte de la API para transacciones

El servidor MySQL soporta transacciones dependiendo de del motor de


almacenamiento usado. Desde MySQL 5.5, el motor de almacenamiento
predeterminado es InnoDB. InnoDB tiene soporte completo para transacciones
ACID.
Las transacciones se pueden controlar usando SQL o llamadas a la API. Se
recomienda usar llamadas a la API para habilitar y deshabilitar el modo de
autoconsignacin (auto commit) y para consignar y reiniciar transacciones.
Ejemplo #1 Establecer el modo de autoconsignacin con SQL y a travs de la API
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .

$mysqli->connect_error;
}
/* Recomendado: usar la API para cotrolar las configuraciones transaccion
ales */
$mysqli->autocommit(false);
/* No sern monitorizadas y reconocidas por la aplicacin y el complement
o de balance de carga */
if (!$mysqli->query('SET AUTOCOMMIT = 0')) {
echo "Fall la consulta: (" . $mysqli->errno . ") " . $mysqli->error;
}
?>

Los paquetes de caractersticas opcionales, como los comlementos de replicacin


y el de balance de carga, pueden fcilmente monitorizar llamadas a la API. El
complemento de replicacin transacciones conscientes del balance de carga, si las
transacciones estn controladas con llamadas a la API. Las transacciones
conscientes del balance de carga no estn disponibles si las sentencias SQL se
usan para establecer el modo de autoconsignacin, consignacin y reinicio de una
transaccin.
Ejemplo #2 Consignacin y reinicio
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
$mysqli->autocommit(false);
$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();
$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
?>

Observe que el servidor MySQL no puede reiniciar todas las sentencias. Algunoas
sentencias causan una consignacin implcia.

Metadatos

Un conjunto de resultados de MySQL contiene metadatos. Los metadatos


describen las columnas encontradas en el conjunto de resultados. Todos los
metadatos enviados por MySQL son accesibles a travbs de la interfaz de mysqli.
La extensin realiza cambios insignificantes o no realiza ninguno a la informacin
que recibe. La diferencias entre versiones del servidor MySQL no estn alineadas.
A los metadatos se puede acceder a travs de la interfaz mysqli_result.
Ejemplo #1 Acceder a los metadatos de un conjunto de resultados
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contrasea", "basedatos")
;
if ($mysqli->connect_errno) {
echo "Fall la conexin a MySQL: (" . $mysqli->connect_errno . ") " .
$mysqli->connect_error;
}
$resultado = $mysqli->query("SELECT 1 AS _one, 'Hello' AS _two FROM DUAL
");
var_dump($resultado->fetch_fields());
?>

El resultado del ejemplo sera:


array(2) {
[0]=>
object(stdClass)#3 (13) {
["name"]=>
string(4) "_one"
["orgname"]=>
string(0) ""

["table"]=>
string(0) ""
["orgtable"]=>
string(0) ""
["def"]=>
string(0) ""
["db"]=>
string(0) ""
["catalog"]=>
string(3) "def"
["max_length"]=>
int(1)
["length"]=>
int(1)
["charsetnr"]=>
int(63)
["flags"]=>
int(32897)
["type"]=>
int(8)
["decimals"]=>
int(0)
}
[1]=>
object(stdClass)#4 (13) {
["name"]=>
string(4) "_two"
["orgname"]=>
string(0) ""
["table"]=>
string(0) ""
["orgtable"]=>
string(0) ""
["def"]=>
string(0) ""
["db"]=>

string(0) ""
["catalog"]=>
string(3) "def"
["max_length"]=>
int(5)
["length"]=>
int(5)
["charsetnr"]=>
int(8)
["flags"]=>
int(1)
["type"]=>
int(253)
["decimals"]=>
int(31)
}
}

Sentencias preparadas
A los metadatos de un conjunto de resultados creado usando sentencias
preparadas se accede de la misma manera. Un gestor demysqli_result apropiado
es devuelto por mysqli_stmt_result_metadata().
Ejemplo #2 Metadatos de sentencias preparadas
<?php
$sentencia = $mysqli->prepare("SELECT 1 AS _one, 'Hello' AS _two FROM DUA
L");
$sentencia->execute();
$resultado = $sentencia->result_metadata();
var_dump($resultado->fetch_fields());
?>

La extensin mysqli y conexiones persistentes

EL soporte para conexiones persistentes fue introducido en PHP 5.3 para el


extensin mysqli. El soporte ya estaba presente en PDO MYSQL y ext/mysql. La
idea detrs de las conexiones persistentes es que una conexin entre un proceso
cliente y una base de datos puede ser reutilizados por un proceso cliente, en lugar
de ser creado y destruido varias veces. Esto reduce la sobrecarga de la creacin
de conexiones nuevas cada vez que es requerido, como las conexiones no
utilizadas se almacenan en cach y estn lista para ser reutilizadas.
A diferencia de la extensin mysql, mysqli no proporciona una funcin separada
para la apertura de conexiones persistentes. Para abrir una conexin persistente
debe de colocar p: al nombre del host cuando se conecta.
El problema con las conexiones persistentes es que se pueden dejar en estados
impredecibles por los clientes. Por ejemplo, un bloqueo de tabla puede ser
activado antes de que un cliente termina de forma inesperada. Un nuevo proceso
cliente reusando esta conexin persistente tendr la conexin "tal cual". Toda la
limpieza tendra que ser realizada por el nuevo proceso cliente antes de que
pudiera hacer buen uso de la conexin persistente, aumentando la carga sobre el
programador.
La conexin persistente de la extensin mysqli no obstante incorpora manejo para
limpieza de cdigo. La limpieza llevada a cabo por mysqliincluye:
o

Rollback de transacciones activas

Cierre y borrado de tablas temporales

Desbloque de tablas

Reestablece variables de sesin

Cerrar consultas preparadas (siempre pasa con PHP)

Cerra controlador

Quitar bloqueos adquiridos con GET_LOCK()

Esto asegura que las conexiones persistentes se encuentran en un estado limpio


para el retorno del conjunto de conexiones, antes de que el proceso cliente los
use.
La extensin mysqli hace la limpieza automticamente llamando a la
funcin mysql_change_user() de C-API.
La caracterstica de limpieza automtica tiene sus ventajas y desventajas aunque.
La ventaja es que el programador no necesita preocuparse por estar aadiendo el
cdigo de limpieza, ya que es llamdo automticamente. Asi mismo, la desventaja
es que el cdigo podra volversepotencialmente un poco ms lento, pues el cdigo
para realizar la limpieza necesita ejecutarse cada vez que una conexin es
devuelta por el conjunto de conexiones.
Es posible desactivar el cdigo de limpieza automtica, mediante la compilacin
de PHP si se define MYSQLI_NO_CHANGE_USER_ON_PCONNECT.
Nota:
La extensin mysqli soporta conexiones persistentes utilizando ya sea el driver
nativo de MySQL o la libreria cliente de MySQL.

Constantes predefinidas

Estas constantes estn definidas por esta extensin y estarn disponibles slo
cuando la extensin haya sido compilada con PHP, o bien sea cargada
dinmicamente en ejecucin.
MYSQLI_READ_DEFAULT_GROUP

Lee las opciones del grupo mencionado de my.cnf o del archivo


especificado con MYSQLI_READ_DEFAULT_FILE
MYSQLI_READ_DEFAULT_FILE

Lee las opciones de la opcion llamada archivo en lugar de my.cnf

MYSQLI_OPT_CONNECT_TIMEOUT

Tiempo de espera de conexin en segundos


MYSQLI_OPT_LOCAL_INFILE

Permite comando LOAD LOCAL INFILE


MYSQLI_INIT_COMMAND

Comando a ejecutar cuando se conecta al servidor MySQL. Puede ser reejecutado automticamente cuando se reconecta.
MYSQLI_CLIENT_SSL

Usar SSL (protocolo de cifrado). Esta opcin no debe ser fijado por los
programas de aplicacin; se establece internamente en la biblioteca cliente
de MySQL
MYSQLI_CLIENT_COMPRESS

Usar protocolo de compresin


MYSQLI_CLIENT_INTERACTIVE

Permite interactive_timeout segundos (en lugar de wait_timeout segundos)


de inactividad antes de cerrar la conexin. La variable sesin del
cliente wait_timeout se establecer en el valor de la variable de
sesin interactive_timeout.
MYSQLI_CLIENT_IGNORE_SPACE

Permite espacios despus de nombres de funcin. Hace que todos los


nombres de las funciones sean palabras reservadas.
MYSQLI_CLIENT_NO_SCHEMA

No permite la sistaxisdb_name.tbl_name.col_name.
MYSQLI_CLIENT_MULTI_QUERIES

Permite consultas con multiples punto y coma en una sola llamada


a mysqli_query().
MYSQLI_STORE_RESULT

Utilizar conjuntos de resultados almacenado temporalmente


MYSQLI_USE_RESULT

Utilizar conjuntos de resultados sin almacenado temporal


MYSQLI_ASSOC

Las columnas son devueltas en el array teniendo el nombre del campo


como ndice del array.
MYSQLI_NUM

Las columnas son devueltas en el array teniendo un ndice enumerado.


MYSQLI_BOTH

Las columnas son devueltas en el array teniendo tanto un ndice numrico y


el nombre del campo como el ndice asociativo.
MYSQLI_NOT_NULL_FLAG

Indica que un campo ha sido definido como NOT NULL


MYSQLI_PRI_KEY_FLAG

El campo es parte de un ndice primario.


MYSQLI_UNIQUE_KEY_FLAG

El campo es parte de un ndice nico.


MYSQLI_MULTIPLE_KEY_FLAG

El campo es parte de un ndice.


MYSQLI_BLOB_FLAG

El campo es definido como BLOB


MYSQLI_UNSIGNED_FLAG

El campo es definido como UNSIGNED


MYSQLI_ZEROFILL_FLAG

El campo es definido como ZEROFILL


MYSQLI_AUTO_INCREMENT_FLAG

El campo es definido como AUTO_INCREMENT


MYSQLI_TIMESTAMP_FLAG

El campo es definido como TIMESTAMP


MYSQLI_SET_FLAG

El campo es definido como SET


MYSQLI_NUM_FLAG

El campo es definido como NUMERIC


MYSQLI_PART_KEY_FLAG

El campo es parte de un multi-ndice


MYSQLI_GROUP_FLAG

El campo es parte GROUP BY


MYSQLI_TYPE_DECIMAL

El campo es definido como DECIMAL


MYSQLI_TYPE_NEWDECIMAL

La precisin matemtica del campo DECIMAL o NUMERIC (MySQL 5.0.3 y


posteriores)
MYSQLI_TYPE_BIT

El campo es definido como BIT (MySQL 5.0.3 y posteriores)


MYSQLI_TYPE_TINY

El campo es definido como TINYINT


MYSQLI_TYPE_SHORT

El campo es definido como SMALLINT


MYSQLI_TYPE_LONG

El campo es definido como INT


MYSQLI_TYPE_FLOAT

El campo es definido como FLOAT


MYSQLI_TYPE_DOUBLE

El campo es definido como DOUBLE


MYSQLI_TYPE_NULL

El campo es definido como DEFAULT NULL


MYSQLI_TYPE_TIMESTAMP

El campo es definido como TIMESTAMP


MYSQLI_TYPE_LONGLONG

El campo es definido como BIGINT


MYSQLI_TYPE_INT24

El campo es definido como MEDIUMINT


MYSQLI_TYPE_DATE

El campo es definido como DATE


MYSQLI_TYPE_TIME

El campo es definido como TIME


MYSQLI_TYPE_DATETIME

El campo es definido como DATETIME


MYSQLI_TYPE_YEAR

El campo es definido como YEAR


MYSQLI_TYPE_NEWDATE

El campo es definido como DATE


MYSQLI_TYPE_INTERVAL

El campo es definido como INTERVAL


MYSQLI_TYPE_ENUM

El campo es definido como ENUM


MYSQLI_TYPE_SET

El campo es definido como SET


MYSQLI_TYPE_TINY_BLOB

El campo es definido como TINYBLOB


MYSQLI_TYPE_MEDIUM_BLOB

El campo es definido como MEDIUMBLOB


MYSQLI_TYPE_LONG_BLOB

El campo es definido como LONGBLOB


MYSQLI_TYPE_BLOB

El campo es definido como BLOB


MYSQLI_TYPE_VAR_STRING

El campo es definido como VARCHAR


MYSQLI_TYPE_STRING

El campo es definido como CHAR o BINARY


MYSQLI_TYPE_CHAR

El campo es definido como TINYINT. Para CHAR,


ver MYSQLI_TYPE_STRING
MYSQLI_TYPE_GEOMETRY

El campo es definido como GEOMETRY


MYSQLI_NEED_DATA

Ms datos disponibles para enlazar la variable


MYSQLI_NO_DATA

No ms datos disponibles para enlazar la variable


MYSQLI_DATA_TRUNCATED

Ocurrio truncado de datos. Disponible desde PHP 5.1.0 y MySQL 5.0.5.


MYSQLI_ENUM_FLAG

El campo es definido como ENUM. Disponible desde PHP 5.3.0.


MYSQLI_BINARY_FLAG

El campo es definido como BINARY. Disponible desde PHP 5.3.0.


MYSQLI_CURSOR_TYPE_FOR_UPDATE
MYSQLI_CURSOR_TYPE_NO_CURSOR
MYSQLI_CURSOR_TYPE_READ_ONLY
MYSQLI_CURSOR_TYPE_SCROLLABLE
MYSQLI_STMT_ATTR_CURSOR_TYPE

MYSQLI_STMT_ATTR_PREFETCH_ROWS
MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH
MYSQLI_SET_CHARSET_NAME
MYSQLI_REPORT_INDEX

Informar de si no se utiliz un ndice o si se utiliz uno errneo en una


conuslta.
MYSQLI_REPORT_ERROR

Informar de los errores de las llamadas a las funciones de mysqli.


MYSQLI_REPORT_STRICT

Lanza una excepcin de tipo mysqli_sql_exception para errores en vez de


para advertencias.
MYSQLI_REPORT_ALL

Activar todas las opciones (informar de todo).


MYSQLI_REPORT_OFF

Desactivar la informacin.
MYSQLI_DEBUG_TRACE_ENABLED

Se establece a 1 si la funcionalidad mysqli_debug() est activada.


MYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USED
MYSQLI_SERVER_QUERY_NO_INDEX_USED
MYSQLI_REFRESH_GRANT

Refresca las tablas grant.


MYSQLI_REFRESH_LOG

Vuelca los logs, como al ejecutar la sentencia SQL FLUSH LOGS.


MYSQLI_REFRESH_TABLES

Vuelca la cache de tablas, como al ejecutar la sentencia SQL FLUSH


TABLES.
MYSQLI_REFRESH_HOSTS

Vuelca la cache de hosts, como al ejecutar la sentencia SQL FLUSH


HOSTS.
MYSQLI_REFRESH_STATUS

Reinicia las variables de estado, como al ejecutar la sentencia SQL FLUSH


STATUS.
MYSQLI_REFRESH_THREADS

Vuelca la cache de hilos.


MYSQLI_REFRESH_SLAVE

En un servidor esclavo de rplica: reinicia la informacin maestra del


servidor, y reanuda el servidor. Como al ejecutar la sentenciaSQL RESET
SLAVE.
MYSQLI_REFRESH_MASTER

En un servidor esclavo de rplica: elimna los ficheros log binarios listados


en el ndice log binario, y trunca el fichero ndice. Como al ejecutar la
sentencia SQL RESET MASTER.
MYSQLI_TRANS_COR_AND_CHAIN

Aade "AND CHAIN" a mysqli_commit() o mysqli_rollback().


MYSQLI_TRANS_COR_AND_NO_CHAIN

Aade "AND NO CHAIN" a mysqli_commit() o mysqli_rollback().


MYSQLI_TRANS_COR_RELEASE

Aade "RELEASE" a mysqli_commit() o mysqli_rollback().


MYSQLI_TRANS_COR_NO_RELEASE

Aade "NO RELEASE" a mysqli_commit() o mysqli_rollback().

Notas

Algunas notas sobre la implementacin:


1. El soporte para MYSQL_TYPE_GEOMETRY fue agregado a la extensin
MySQLi en PHP 5.3.
2. Ntese que existen diferentes implementaciones internas
en libmysqlclient y mysqlnd para manejar columnas del
tipoMYSQL_TYPE_GEOMETRY. En trminos generales, mysqlnd asignar
significativamente menos memoria. Por ejemplo, si hay una
columnaPOINT en un set de resultado, libmysqlclient puede pre-asignar
hasta 4GB de RAM aunque se necesitan menos de 50 bytes para mantener
una comuna POINT en memoria. La asignacin de memoria es mucho
menor, menos de 50 bytes, si se utiliza mysqlnd.

mysqli::$affected_rows
mysqli_affected_rows

(PHP 5)
mysqli::$affected_rows -- mysqli_affected_rows Obtiene el nmero de filas
afectadas en la ltima operacin MySQL
Descripcin
Estilo orientado a objetos
int $mysqli->affected_rows;

Estilo por procedimientos


int mysqli_affected_rows ( mysqli $link )

Devuelve el numero de filas afectadas por la ltima


consultaINSERT, UPDATE, REPLACE or DELETE.
Para instrucciones SELECT mysqli_affected_rows() es equivalente
a mysqli_num_rows().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Un entero mayor que cero indica el nmero de filas afectadas o recuperadas. El
cero indica que no hay registros en una actualizacin con una sentencia UPDATE,
que no hay filas que cumplan la clusula WHERE de la sentencia o que ninguna
consulta ha sido ejecutada todava. -1 indica que la consulta devolvi un error.
Nota:
Si el nmero de filas afectadas es mayor de el mximo valor entero
( PHP_INT_MAX ), dicho nmero ser devuelto como una cadena (string).
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->affected_rows
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Comprueba la conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();

}
/* Inserta filas */
$mysqli->query("CREATE TABLE Language SELECT * from CountryLanguage");
printf("Affected rows (INSERT): %d\n", $mysqli->affected_rows);
$mysqli->query("ALTER TABLE Language ADD Status int default 0");
/* Actualiza filas */
$mysqli->query("UPDATE Language SET Status=1 WHERE Percentage > 50");
printf("Affected rows (UPDATE): %d\n", $mysqli->affected_rows);
/* Elimina filas */
$mysqli->query("DELETE FROM Language WHERE Percentage < 50");
printf("Affected rows (DELETE): %d\n", $mysqli->affected_rows);
/* Selecciona todas las filas */
$result = $mysqli->query("SELECT CountryCode FROM Language");
printf("Affected rows (SELECT): %d\n", $mysqli->affected_rows);
$result->close();
/* Elimina la tabla "Language" */
$mysqli->query("DROP TABLE Language");
/* Cierra la conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
if (!$link) {
printf("Can't connect to localhost. Error: %s\n", mysqli_connect_erro

r());
exit();
}
/* Inserta filas */
mysqli_query($link, "CREATE TABLE Language SELECT * from CountryLanguage"
);
printf("Affected rows (INSERT): %d\n", mysqli_affected_rows($link));
mysqli_query($link, "ALTER TABLE Language ADD Status int default 0");
/* Actualiza filas */
mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50")
;
printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link));
/* Elimina filas */
mysqli_query($link, "DELETE FROM Language WHERE Percentage < 50");
printf("Affected rows (DELETE): %d\n", mysqli_affected_rows($link));
/* Selecciona todas las filas */
$result = mysqli_query($link, "SELECT CountryCode FROM Language");
printf("Affected rows (SELECT): %d\n", mysqli_affected_rows($link));
mysqli_free_result($result);
/* Elimina la tabla "Language" */
mysqli_query($link, "DROP TABLE Language");
/* Cierra la conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Affected rows (INSERT): 984

Affected rows (UPDATE): 168


Affected rows (DELETE): 815
Affected rows (SELECT): 169

mysqli::autocommit
mysqli_autocommit

(PHP 5)
mysqli::autocommit -- mysqli_autocommit Activa o desactiva las modificaciones
de la base de datos autoconsignadas
Descripcin
Estilo orientado a objetos
bool mysqli::autocommit ( bool $mode )

Estilo por procedimientos


bool mysqli_autocommit ( mysqli $link , bool $mode )

Activa o desactiva el modo 'auto-commit' en consultas para la conexin a la base


de datos.
Para determinar el estado actual de la autoconsigna se ha de utilzar el comando
SQL SELECT @@autocommit.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
mode

Si activar o no el modo 'auto-commit'.

Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Notas
Nota:
Esta funcin no puede aplicarse a tipos de tablas no transaccionales (como
MyISAM o ISAM).
Ejemplos
Ejemplo #1 Ejemplo de mysqli::autocommit()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
if (mysqli_connect_errno()) {
printf("Fallo la conexin: %s\n", mysqli_connect_error());
exit();
}
/* activar la autoconsigna */
$mysqli->autocommit(TRUE);
if ($resultado = $mysqli->query("SELECT @@autocommit")) {
$fila = $resultado->fetch_row();
printf("El estado de la autoconsigna es %s\n", $fila[0]);
$resultado->free();
}
/* Cerrar conexin */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor
ld");
if (!$enlace) {
printf("Imposible conectar a localhost. Error: %s\n", mysqli_connect_
error());
exit();
}
/* activar la autoconsigna */
mysqli_autocommit($enlace, TRUE);
if ($resultado = mysqli_query($enlace, "SELECT @@autocommit")) {
$fila = mysqli_fetch_row($resultado);
printf("El estado de la autoconsigna es %s\n", $fila[0]);
mysqli_free_result($resultado);
}
/* close connection */
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


El estado de la autoconsigna es 1

mysqli::begin_transaction
mysqli_begin_transaction

(PHP 5 >= 5.5.0)


mysqli::begin_transaction -- mysqli_begin_transaction Inicia una transaccin

Descripcin
Estilo orientado a objetos (method):
public bool mysqli::begin_transaction ([ int $flags [, string $name
]] )

Estilo por procedimientos:


bool mysqli_begin_transaction ( mysqli $link [, int $flags [, strin
g $name ]] )
Advertencia

Esta funcin no est documentada actualmente, solamente se encuentra


disponible la lista de parmetros.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
flags
name

Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.

mysqli::change_user
mysqli_change_user

(PHP 5)
mysqli::change_user -- mysqli_change_user Cambia el usuario de la conexin
de bases de datos especificada

Descripcin
Estilo orientado a objetos
bool mysqli::change_user ( string $user , string $password , string $datab
ase )

Estilo por procedimientos


bool mysqli_change_user ( mysqli $link , string $user , string $password
, string $database )

Cambia el usuario de la conexin de base de datos especificada y establece la


base de datos actual.
Para realizar con xito el cambio de usuarios, un username y password vlidos
deben ser indicados y ese usuario debe tener suficientes permisos para acceder a
la base de datos deseada. Si por cualquier razn la autorizacin falla, se
mantendr la autenticacin de usuario existente.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
user

Nombre de usuario de MySQL.


password

Contrasea de MySQL.
database

La base de datos a la que quiero cambiar.


Si se desea, se puede parar el valor NULL de modo que solo cambiar el
usuario y no se seleccionar una base de datos. Para seleccionar una base
de datos en este caso, utilice la funcin mysqli_select_db().

Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Notas
Nota:
El uso de este comando siempre causar que la conexin a la base de datos
actual se comporte como una conexin completamente nueva,
independientemente de si la operacin se ha completado con xito. Este reinicio
incluye la realizacin de un "rollback" a cualquier transaccin activa, cerrando
todas las tablas temporales, y desbloqueando todas las tablas bloqueadas.
Ejemplos
Ejemplo #1 Ejemplo del mtodo mysqli::change_user()
Estilo orientado a objetos
<?php
/* connect database test */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "test");
/* check connection */
if (mysqli_connect_errno()) {
printf("Error de conexin: %s\n", mysqli_connect_error());
exit();
}
/* Set Variable a */
$mysqli->query("SET @a:=1");
/* reiniciando todo, y realizando una nueva conexin a base de datos */
$mysqli->change_user("my_user", "my_password", "world");
if ($result = $mysqli->query("SELECT DATABASE()")) {
$row = $result->fetch_row();

printf("Base de datos predeterminada: %s\n", $row[0]);


$result->close();
}
if ($result = $mysqli->query("SELECT @a")) {
$row = $result->fetch_row();
if ($row[0] === NULL) {
printf("Value of variable a is NULL\n");
}
$result->close();
}
/* close connection */
$mysqli->close();
?>

Estilo por procedimientos


<?php
/* connect database test */
$link = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "test"
);
/* check connection */
if (!$link) {
printf("Error de conexin: %s\n", mysqli_connect_error());
exit();
}
/* Set Variable a */
mysqli_query($link, "SET @a:=1");
/* reinciando todo y realizando una nueva conexin a base de datos. */
mysqli_change_user($link, "my_user", "my_password", "world");
if ($result = mysqli_query($link, "SELECT DATABASE()")) {

$row = mysqli_fetch_row($result);
printf("Default database: %s\n", $row[0]);
mysqli_free_result($result);
}
if ($result = mysqli_query($link, "SELECT @a")) {
$row = mysqli_fetch_row($result);
if ($row[0] === NULL) {
printf("Value of variable a is NULL\n");
}
mysqli_free_result($result);
}
/* Cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Default database: world
Value of variable a is NULL

mysqli::character_set_name
mysqli_character_set_name

(PHP 5)
mysqli::character_set_name -- mysqli_character_set_name Devuelve el juego
de caracteres predeterminado para la conexin a la base de datos
Descripcin
Estilo orientado a objetos
string mysqli::character_set_name ( void )

Estilo por procedimientos


string mysqli_character_set_name ( mysqli $link )

Devuelve el juego de caracteres actual para la conexin a la base de datos.


Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
El juego de caracteres predeterminado para la conexin actual
Ejemplos
Ejemplo #1 Ejemplo de mysqli::character_set_name()
Estilo orientado a objetos
<?php
/* Abrir una conexin */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
/* comprobar la conexin */
if (mysqli_connect_errno()) {
printf("La conexin fall: %s\n", mysqli_connect_error());
exit();
}
/* Imprimir el juego de caracteres en uso */
$charset = $mysqli->character_set_name();
printf ("El juego de caracteres en uso es %s\n", $charset);
$mysqli->close();
?>

Estilo por procedimientos

<?php
/* Abrir una conexin */
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* comprobar la conexin */
if (!$link) {
printf("La conexin fall: %s\n", mysqli_connect_error());
exit();
}
/* Print current character set */
$charset = mysqli_character_set_name($link);
printf ("Current character set is %s\n",$charset);
/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


El juego de caracteres en uso es latin1_swedish_ci

mysqli::$client_info
mysqli_get_client_info

(PHP 5)
mysqli::$client_info -- mysqli_get_client_info Obtiene informacin de la versin
cliente de MySQL
Descripcin
Estilo orientado a objetos
string $mysqli->client_info;

Estilo por procedimientos

string mysqli_get_client_info ( mysqli $link )

Devuelve una cadena que representa la versin de la biblioteca cliente MySQL.


Valores devueltos
Una cadena que representa la versin de la biblioteca cliente MySQL
Ejemplos
Ejemplo #1 mysqli_get_client_info
<?php
/* No es necesaria una conexin para determinar
la versin de la biblioteca cliente de MySQL */
printf("Versin de la biblioteca cliente: %s\n", mysqli_get_client_info()
);
?>

mysqli::$client_version
mysqli_get_client_version

(PHP 5)
mysqli::$client_version -- mysqli_get_client_version Devuelve la versin cliente
de MySQL como una cadena
Descripcin
Estilo orientado a objetos
int $mysqli->client_version;

Estilo por procedimientos


int mysqli_get_client_version ( mysqli $link )

Devuelve la versin del cliente como un entero.

Valores devueltos
Un nmero que representa la versin del cliente MySQL en el
formato: versin_mayor*10000 + versin_menor*100 + subversin. Por ejemplo,
4.1.0 ser devuelto como 40100.
Esto es til para determinar rpidamente la versin de la biblioteca cliente para
saber si existe alguna funcionalidad.
Ejemplos
Ejemplo #1 mysqli_get_client_version
<?php
/* No es necesaria una conexin para determinar
la versin de la biblioteca cliente de MySQL */
printf("Versin de la biblioteca cliente: %d\n", mysqli_get_client_versio
n());
?>

mysqli::close
mysqli_close

(PHP 5)
mysqli::close -- mysqli_close Cierra una conexin a base de datos previamente
abierta
Descripcin
Estilo orientado a objetos
bool mysqli::close ( void )

Estilo por procedimientos

bool mysqli_close ( mysqli $link )

Cierra una conexin a base de datos abierta previamente.


Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Ejemplos
Veas mysqli_connect().

mysqli::commit
mysqli_commit

(PHP 5)
mysqli::commit -- mysqli_commit Consigna la transaccin actual
Descripcin
Estilo orientado a objetos
bool mysqli::commit ([ int $flags [, string $name ]] )

Estilo por procedimientos


bool mysqli_commit ( mysqli $link [, int $flags [, string $name ]] )

Consigna la transaccin actual para la conexin a la base de datos.


Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
flags

Una mscara de bits de constantes MYSQLI_TRANS_COR_*.


name

Si se proporciona, se ejecuta COMMIT/*name*/.


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Historial de cambios
Versin

Descripcin

5.5.0

Se aadieron los parmetros flags y name.

Ejemplos
Ejemplo #1 Ejemplo de mysqli::commit()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
$mysqli->query("CREATE TABLE Language LIKE CountryLanguage");
/* Desactivar la autoconsigna */
$mysqli->autocommit(FALSE);
/* Inserta algunos valores */

$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F', 11.2


)");
$mysqli->query("INSERT INTO Language VALUES ('DEU', 'Swabian', 'F', 9.4)
");
/* Consignar la transaccin */
if (!$mysqli->commit()) {
print("Fall la consignacin de la transaccin\n");
exit();
}
/* Eliminar la tabla */
$mysqli->query("DROP TABLE Language");
/* Cerrar la conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "my_user", "my_password", "test");
/* Comprobar la conexin */
if (!$enlace) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* Desactivar la autoconsignacin */
mysqli_autocommit($enlace, FALSE);
mysqli_query($enlace, "CREATE TABLE Language LIKE CountryLanguage");
/* Insertar algunos valores */
mysqli_query($enlace, "INSERT INTO Language VALUES ('DEU', 'Bavarian', 'F

', 11.2)");
mysqli_query($enlace, "INSERT INTO Language VALUES ('DEU', 'Swabian', 'F'
, 9.4)");
/* Consignar la transacin */
if (!mysqli_commit($enlace)) {
print("Fall la consignacin de la transaccin\n");
exit();
}
/* Cerrar la conexin */
mysqli_close($enlace);
?>

mysqli::$connect_errno
mysqli_connect_errno

(PHP 5)
mysqli::$connect_errno -- mysqli_connect_errno Devuelve el cdigo de error de
la ltima llamada
Descripcin
Estilo orientado a objetos
int $mysqli->connect_errno;

Estilo por procedimientos


int mysqli_connect_errno ( void )

Devuelve el ultimo cdigo de error de la ltima llamada mysqli_connect().


Nota:

Los nmeros de los mensajes de error estn listados en el fichero de cabeceras


de MySQL errmsg.h, los nmeros de los mensajes de error del servidor estn
listados en mysqld_error.h. En la distribucin de cdigo fuente puede encontrar
una lista completa de los mensajes de error y sus nmeros en el
fichero Docs/mysqld_error.txt.
Valores devueltos
Un cdigo de error para la ultima llamada a mysqli_connect(), si ha fallado. cero
significa que no ha ocurrido ningn error.
Ejemplos
Ejemplo #1 $mysqli->connect_errno example
Estilo orientado a objetos
<?php
$mysqli = @new mysqli('localhost', 'fake_user', 'my_password', 'my_db');
if ($mysqli->connect_errno) {
die('Connect Error: ' . $mysqli->connect_errno);
}
?>

Estilo por procedimientos


<?php
$link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db')
;
if (!$link) {
die('Connect Error: ' . mysqli_connect_errno());
}
?>

El resultado de los ejemplos seran:


Connect Error: 1045

mysqli::$connect_error
mysqli_connect_error

(PHP 5)
mysqli::$connect_error -- mysqli_connect_error Devuelve una cadena con la
descripcin del ltimo error de conexin
Descripcin
Estilo orientado a objetos
string $mysqli->connect_error;

Estilo por procedimientos


string mysqli_connect_error ( void )

Devuelve el ltimo mensaje de error de la ultima llamada mysqli_connect().


Valores devueltos
Una cadena que describe el error. Devuelve NULL si no ha ocurrido ningn error.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->connect_error
Estilo orientado a objetos
<?php
$mysqli = @new mysqli('localhost', 'fake_user', 'my_password', 'my_db');
// Works as of PHP 5.2.9 and 5.3.0.
if ($mysqli->connect_error) {
die('Error de conexin: ' . $mysqli->connect_error);
}
?>

Estilo por procedimientos

<?php
$link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_db')
;
if (!$link) {
die('Error de conexin: ' . mysqli_connect_error());
}
?>

El resultado de los ejemplos seran:


Connect Error: Access denied for user 'fake_user'@'localhost' (using
password: YES)

Notas
Advertencia

La propiedad mysqli->connect_error solo funciona correctamente en las versiones


5.2.9 y 5.3.0 de PHP. Usa la funcinmysqli_connect_error() si es necesaria la
compatibilidad con versiones anteriores de PHP.

mysqli::__construct
mysqli_connect

(PHP 5)
mysqli::__construct -- mysqli_connect Abre una nueva conexin al servidor de
MySQL
Descripcin
Estilo orientado a objetos
mysqli::__construct ([ string $host =
ini_get("mysqli.default_host") [, string $username =
ini_get("mysqli.default_user") [, string $passwd =

ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port =


ini_get("mysqli.default_port") [, string $socket =
ini_get("mysqli.default_socket") ]]]]]] )

Estilo por procedimientos


mysqli mysqli_connect ([ string $host =
ini_get("mysqli.default_host") [, string $username =
ini_get("mysqli.default_user") [, string $passwd =
ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port =
ini_get("mysqli.default_port") [, string $socket =
ini_get("mysqli.default_socket") ]]]]]] )

Abre una conexin al Servidor de MySQL que est en ejecucin.


Parmetros
host

Puede ser o un nombre de host o una direccin IP. Pasando el valor NULL o
la cadena "localhost" a este parmetro, se asumir el host local. Cuando es
posible, se usarn tuberas en lugar del protocolo TCP/IP.
Anteponer p: al host, abre una conexin
persistente. mysqli_change_user() es automticamente llamado en
conexiones abiertas desde la cach de conexiones.
username

El nombre de usuario de MySQL.


passwd

Si no se proporciona o es NULL, el servidor MySQL intentar autentificar el


usuario solo con aquellos registros de usuarios que no tienen contrasea.
Esto permite que un nombre de usuario ser usado con diferentes permisos
(dependiendo de si se proporciona una contrasea o no).
dbname

Si se proporcioina, especificar la base de datos prederminada a usar


cuando se realizan consultas.
port

Especifica el nmero al que intentar conectar al servidor de MySQL.


socket

Especifica el socket o la tubera con nombre que debera usarse.


Nota:
Especificar el parmetro socket no determinar explicitamente el tipo de
conexin a utilizar cuando se conecte al servidor MySQL. El modo de
realizar la conexin a la base de datos MySQL es determinado por el
parmetro host.
Valores devueltos
Devuelve un objeto que representa la conexin al servidor MySQL.
Historial de cambios
Versin

Descripcin

5.3.0

Se aadi la capacidad de conexiones persistentes.

Ejemplos
Ejemplo #1 Ejemplo de mysqli::__construct()
Estilo orientado a objetos
<?php
$mysqli = new mysqli('localhost', 'mi_usuario', 'mi_contrasea', 'mi_bd')
;
/*
* Esta es la forma OO "oficial" de hacerlo,
* AUNQUE $connect_error estaba averiado hasta PHP 5.2.9 y 5.3.0.
*/
if ($mysqli->connect_error) {

die('Error de Conexin (' . $mysqli->connect_errno . ') '


. $mysqli->connect_error);
}
/*
* Use esto en lugar de $connect_error si necesita asegurarse
* de la compatibilidad con versiones de PHP anteriores a 5.2.9 y 5.3.0.
*/
if (mysqli_connect_error()) {
die('Error de Conexin (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'xito... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>

Estilo orientado a objetos cuando se extiende la clase mysqli


<?php
class foo_mysqli extends mysqli {
public function __construct($host, $usuario, $contrasea, $bd) {
parent::__construct($host, $usuario, $contrasea, $bd);
if (mysqli_connect_error()) {
die('Error de Conexin (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}
$bd = new foo_mysqli('localhost', 'mi_usuario', 'mi_contrasea', 'mi_bd')
;

echo 'xito... ' . $bd->host_info . "\n";


$bd->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect('localhost', 'mi_usuario', 'mi_contrasea', 'mi_
bd');
if (!$enlace) {
die('Error de Conexin (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'xito... ' . mysqli_get_host_info($enlace) . "\n";
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


xito... MySQL host info: localhost via TCP/IP

Notas
Nota:
MySQLnd siempre utiliza el juego de caracteres de idioma predeterminado. El
juego de caracteres se enva en la autentificacin/acuerdo que se produce durante
la conexin, que utilizar mysqlnd.
Libmysqlclient utiliza el juego de caracteres predeterminado definido en my.cnf o
se puede establecer llamando mysqli_options() antes de
user mysqli_real_connect(), pero despus de mysqli_init().
Nota:

Slo para la sintaxis OO: Si una conexin falla se devuelve un objeto. Para
comprobar si la conexin fall, use la funcinmysqli_connect_error() o la
propiedad mysqli->connect_error como en los ejemplos anteriores.
Nota:
Si es necesario establecer las opciones, tales como el tiempo de espera de
conexin, se debe utilizar mysqli_real_connect() en su lugar.
Nota:
Llamar al constructor sin parmetros es lo mismo que llamar a la
funcin mysqli_init().
Nota:
El error "Can't create TCP/IP socket (10106)" normalmente significa que la
directiva de configuracin variables_order no contiene el carcter E. En Windows,
si el entorno no es copiado, la variable de entorno SYSTEMROOT no estar
disponible y PHP tendr problemas al cargar Winsock.

mysqli::debug
mysqli_debug

(PHP 5)
mysqli::debug -- mysqli_debug Realiza operaciones de depuracin
Descripcin
Estilo orientado a objetos
bool mysqli::debug ( string $message )

Estilo por procedimientos

bool mysqli_debug ( string $message )

Realiza operaciones de depuracin usando la librera Fred Fish.


Parmetros
message

Una cadena que representa la operacin de depuracin a realizar


Valores devueltos
Devuelve TRUE.
Notas
Nota:
Para usar la funcin mysqli_debug() debes compilar la librera del cliente MySQL
para que soporte depuracin.
Ejemplos
Ejemplo #1 Generando un fichero de prueba (traza)
<?php
/* Create a trace file in '/tmp/client.trace' on the local (client) machi
ne: */
mysqli_debug("d:t:o,/tmp/client.trace");
?>

mysqli::dump_debug_info
mysqli_dump_debug_info

(PHP 5)

mysqli::dump_debug_info -- mysqli_dump_debug_info Volcado de informacin


de depuracin en el registro
Descripcin
Estilo orientado a objetos
bool mysqli::dump_debug_info ( void )

Estilo por procedimientos


bool mysqli_dump_debug_info ( mysqli $link )

Esta funcin est diseada para ser ejecutada por un usuario con el privilegio
SUPER y se utiliza para volcar la informacin de depuracin en el registro para el
servidor MySQL relacionado con la conexin.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.

mysqli::$errno
mysqli_errno

(PHP 5)
mysqli::$errno -- mysqli_errno Devuelve el cdigo del error de la ltima funcin
llamada
Descripcin
Estilo orientado a objetos
int $mysqli->errno;

Estilo por procedimientos


int mysqli_errno ( mysqli $link )

Devuelve el ltimo cdigo de error de la llamada ms reciente a una funcin


MySQLi que podr haberse ejecutado con xito o haber fallado.
Los nmeros de los errores de cliente, estn indicados en el fichero de
cabecera errmsg.h, los nmeros de mensajes de error del servidor estn
indicados en mysqld_error.h. En la documentacin de MySQL puedes encontrar
una lista de mensajes de error y su numeracin en el
fichero Docs/mysqld_error.txt.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Un cdigo de error de la ltima llamada, si sta ha fallado. Si devuelve cero
significa que no ha ocurrido ningn error.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->errno
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* comprobar la conexin */
if ($mysqli->connect_errno) {
printf("Fall la conexin: %s\n", $mysqli->connect_error);
exit();
}
if (!$mysqli->query("SET a=1")) {

printf("Cdigo de error: %d\n", $mysqli->errno);


}
/* cerrar la conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if (!mysqli_query($link, "SET a=1")) {
printf("Errorcode: %d\n", mysqli_errno($link));
}
/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Errorcode: 1193

mysqli::$error_list
mysqli_error_list

(PHP 5 >= 5.4.0)

mysqli::$error_list -- mysqli_error_list Devuelve una lista de errores desde el


ltimo comando ejecutado
Descripcin
Estilo orientado a objetos
array $mysqli->error_list;

Estilo por procedimientos


array mysqli_error_list ( mysqli $link )

Devuelve una array de errores de la llamada a la funcin de MySQLi ms reciente


que puede tener xito o no.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Una lista de errores, cada uno como un array asociativo que contiene el errno, el
error, y el sqlstate.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->error_list
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "nadie", "");
/* verficar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}

if (!$mysqli->query("SET a=1")) {
print_r($mysqli->error_list);
}
/* cerrar la conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor
ld");
/* verficar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
if (!mysqli_query($enlace, "SET a=1")) {
print_r(mysqli_error_list($enlace));
}
/* cerrar la conexin */
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


Array
(
[0] => Array
(
[errno] => 1193
[sqlstate] => HY000
[error] => Unknown system variable 'a'

)
)

mysqli::$error
mysqli_error

(PHP 5)
mysqli::$error -- mysqli_error Devuelve una cadena que describe el ltimo error
Descripcin
Estilo orientado a objetos
string $mysqli->error;

Estilo por procedimientos


string mysqli_error ( mysqli $link )

Devuelve el ltmo mensaje de error para la llamada ms reciente a una funcin de


MySQLi que puede haberse ejecutado correctamente o haber fallado.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Una cadena que describe el error. Una cadena vaca si no ha ocurrido error
alguno.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->error
Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Comprueba la conexin */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
if (!$mysqli->query("SET a=1")) {
printf("Errormessage: %s\n", $mysqli->error);
}
/* Cierra la conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Comprueba la conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if (!mysqli_query($link, "SET a=1")) {
printf("Errormessage: %s\n", mysqli_error($link));
}
/* Cierra la conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:

Errormessage: Unknown system variable 'a'

mysqli::$field_count
mysqli_field_count

(PHP 5)
mysqli::$field_count -- mysqli_field_count Devuelve el nmero de columnas para
la consulta ms reciente
Descripcin
Estilo orientado a objetos
int $mysqli->field_count;

Estilo por procedimientos


int mysqli_field_count ( mysqli $link )

Devuelve el numero de columnas para la consulta ms reciente en la conexin


representada por el parmetro link. Esta funcin puede ser til cuando se utiliza
la funcin mysqli_store_result() para determinar si la consulta ha producido un
resultado no vaco o no, sin saber la naturaleza de la consulta.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Un entero que representa el nmero de campos en un set de resultado. An integer
representing the number of fields in a result set.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->field_count

Estilo orientado a objetos


<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
$mysqli->query( "DROP TABLE IF EXISTS friends");
$mysqli->query( "CREATE TABLE friends (id int, name varchar(20))");
$mysqli->query( "INSERT INTO friends VALUES (1,'Hartmut'), (2, 'Ulf')");

$mysqli->real_query("SELECT * FROM friends");


if ($mysqli->field_count) {
/* this was a select/show or describe query */
$result = $mysqli->store_result();
/* process resultset */
$row = $result->fetch_row();
/* free resultset */
$result->close();
}
/* close connection */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "test");
mysqli_query($link, "DROP TABLE IF EXISTS friends");
mysqli_query($link, "CREATE TABLE friends (id int, name varchar(20))");
mysqli_query($link, "INSERT INTO friends VALUES (1,'Hartmut'), (2, 'Ulf')

");
mysqli_real_query($link, "SELECT * FROM friends");
if (mysqli_field_count($link)) {
/* this was a select/show or describe query */
$result = mysqli_store_result($link);
/* process resultset */
$row = mysqli_fetch_row($result);
/* free resultset */
mysqli_free_result($result);
}
/* close connection */
mysqli_close($link);
?>

mysqli::get_charset
mysqli_get_charset

(PHP 5 >= 5.1.0)


mysqli::get_charset -- mysqli_get_charset Devuelve un objeto que contiene el
conjunto de caracteres
Descripcin
Estilo orientado a objetos
object mysqli::get_charset ( void )

Estilo por procedimientos

object mysqli_get_charset ( mysqli $link )

Devuelve un conjunto de caracteres objeto que proporciona varias propiedades del


conjunto de caracteres activo actual.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
La funcin devuelve un conjunto de caracteres objeto con las siguientes
propiedades:
charset

Nombre del conjunto de caracteres


collation

Nombre de la colacin
dir

Directory the charset description was fetched from (?) or "" for built-in
character sets
min_length

Tamao mnimo de carcter en bytes


max_length

Tamao mximo de carcter en bytes


number

Nmero interno del conjunto de caracteres


state

Estado del conjunto de caracteres (?)

Ejemplos
Ejemplo #1 mysqli::get_charset() example
Estilo orientado a objetos
<?php
$db = mysqli_init();
$db->real_connect("localhost","root","","test");
var_dump($db->get_charset());
?>

Estilo por procedimientos


<?php
$db = mysqli_init();
mysqli_real_connect($db, "localhost","root","","test");
var_dump($db->get_charset());
?>

El resultado de los ejemplos seran:


object(stdClass)#2 (7) {
["charset"]=>
string(6) "latin1"
["collation"]=>
string(17) "latin1_swedish_ci"
["dir"]=>
string(0) ""
["min_length"]=>
int(1)
["max_length"]=>
int(1)
["number"]=>
int(8)
["state"]=>
int(801)
}

mysqli::get_client_info
mysqli_get_client_info

(PHP 5)
mysqli::get_client_info -- mysqli_get_client_info Obtiene informacin de la
biblioteca cliente de MySQL
Descripcin
Estilo orientado a objetos
string mysqli::get_client_info ( void )

Estilo por procedimientos


string mysqli_get_client_info ( mysqli $link )

Devuelve una cadena que representa la versin de la biblioteca cliente MySQL.


Valores devueltos
Una cadena que representa la versin de la biblioteca cliente de MySQL
Ejemplos
Ejemplo #1 mysqli_get_client_info
<?php
/* No es necesaria una conexin para determinar
la versin de la biblioteca cliente MySQL */
printf("Versin de la biblioteca cliente: %s\n", mysqli_get_client_info()
);
?>

mysqli_get_client_stats

(PHP 5 >= 5.3.0)


mysqli_get_client_stats Devuelve estadsticas de clientes por proceso
Descripcin
array mysqli_get_client_stats ( void )

Devuelve estadsticas de cliente por proceso. Disponible slo con mysqlnd.


Parmetros
Valores devueltos
Devuelve un array con estadsticas de cliente en caso de xito, FALSE en caso
contrario.
Ejemplos
Ejemplo #1 A mysqli_get_client_stats() example
<?php
$link = mysqli_connect();
print_r(mysqli_get_client_stats());
?>

El resultado del ejemplo sera algo similar a:


Array
(
[bytes_sent] => 43
[bytes_received] => 80
[packets_sent] => 1
[packets_received] => 2
[protocol_overhead_in] => 8
[protocol_overhead_out] => 4
[bytes_received_ok_packet] => 11
[bytes_received_eof_packet] => 0
[bytes_received_rset_header_packet] => 0

[bytes_received_rset_field_meta_packet] => 0
[bytes_received_rset_row_packet] => 0
[bytes_received_prepare_response_packet] => 0
[bytes_received_change_user_packet] => 0
[packets_sent_command] => 0
[packets_received_ok] => 1
[packets_received_eof] => 0
[packets_received_rset_header] => 0
[packets_received_rset_field_meta] => 0
[packets_received_rset_row] => 0
[packets_received_prepare_response] => 0
[packets_received_change_user] => 0
[result_set_queries] => 0
[non_result_set_queries] => 0
[no_index_used] => 0
[bad_index_used] => 0
[slow_queries] => 0
[buffered_sets] => 0
[unbuffered_sets] => 0
[ps_buffered_sets] => 0
[ps_unbuffered_sets] => 0
[flushed_normal_sets] => 0
[flushed_ps_sets] => 0
[ps_prepared_never_executed] => 0
[ps_prepared_once_executed] => 0
[rows_fetched_from_server_normal] => 0
[rows_fetched_from_server_ps] => 0
[rows_buffered_from_client_normal] => 0
[rows_buffered_from_client_ps] => 0
[rows_fetched_from_client_normal_buffered] => 0
[rows_fetched_from_client_normal_unbuffered] => 0
[rows_fetched_from_client_ps_buffered] => 0
[rows_fetched_from_client_ps_unbuffered] => 0
[rows_fetched_from_client_ps_cursor] => 0
[rows_skipped_normal] => 0
[rows_skipped_ps] => 0

[copy_on_write_saved] => 0
[copy_on_write_performed] => 0
[command_buffer_too_small] => 0
[connect_success] => 1
[connect_failure] => 0
[connection_reused] => 0
[reconnect] => 0
[pconnect_success] => 0
[active_connections] => 1
[active_persistent_connections] => 0
[explicit_close] => 0
[implicit_close] => 0
[disconnect_close] => 0
[in_middle_of_command_close] => 0
[explicit_free_result] => 0
[implicit_free_result] => 0
[explicit_stmt_close] => 0
[implicit_stmt_close] => 0
[mem_emalloc_count] => 0
[mem_emalloc_ammount] => 0
[mem_ecalloc_count] => 0
[mem_ecalloc_ammount] => 0
[mem_erealloc_count] => 0
[mem_erealloc_ammount] => 0
[mem_efree_count] => 0
[mem_malloc_count] => 0
[mem_malloc_ammount] => 0
[mem_calloc_count] => 0
[mem_calloc_ammount] => 0
[mem_realloc_count] => 0
[mem_realloc_ammount] => 0
[mem_free_count] => 0
[proto_text_fetched_null] => 0
[proto_text_fetched_bit] => 0
[proto_text_fetched_tinyint] => 0
[proto_text_fetched_short] => 0

[proto_text_fetched_int24] => 0
[proto_text_fetched_int] => 0
[proto_text_fetched_bigint] => 0
[proto_text_fetched_decimal] => 0
[proto_text_fetched_float] => 0
[proto_text_fetched_double] => 0
[proto_text_fetched_date] => 0
[proto_text_fetched_year] => 0
[proto_text_fetched_time] => 0
[proto_text_fetched_datetime] => 0
[proto_text_fetched_timestamp] => 0
[proto_text_fetched_string] => 0
[proto_text_fetched_blob] => 0
[proto_text_fetched_enum] => 0
[proto_text_fetched_set] => 0
[proto_text_fetched_geometry] => 0
[proto_text_fetched_other] => 0
[proto_binary_fetched_null] => 0
[proto_binary_fetched_bit] => 0
[proto_binary_fetched_tinyint] => 0
[proto_binary_fetched_short] => 0
[proto_binary_fetched_int24] => 0
[proto_binary_fetched_int] => 0
[proto_binary_fetched_bigint] => 0
[proto_binary_fetched_decimal] => 0
[proto_binary_fetched_float] => 0
[proto_binary_fetched_double] => 0
[proto_binary_fetched_date] => 0
[proto_binary_fetched_year] => 0
[proto_binary_fetched_time] => 0
[proto_binary_fetched_datetime] => 0
[proto_binary_fetched_timestamp] => 0
[proto_binary_fetched_string] => 0
[proto_binary_fetched_blob] => 0
[proto_binary_fetched_enum] => 0
[proto_binary_fetched_set] => 0

[proto_binary_fetched_geometry] => 0
[proto_binary_fetched_other] => 0
)

mysqli_get_client_version
mysqli::$client_version

(PHP 5)
mysqli_get_client_version -- mysqli::$client_version Devuelve la versin clientes
de MySQL como valor de tipo integer
Descripcin
Estilo orientado a objetos
int $mysqli->client_version;

Estilo por procedimientos


int mysqli_get_client_version ( mysqli $link )

Devolver la versin de cliente como un valor entero.


Valores devueltos
Un nmero que representa la versin de la librera del cliente MySQL en
formato: main_version*10000 + minor_version *100 + sub_version. Por ejemplo,
4.1.0 ser devuelto como 40100.
Esto es til para determinar rpidamente la versin de la librera del cliente para
saber si alguna funcionalidad existe.
Ejemplos
Ejemplo #1 mysqli_get_client_version
<?php
/* No se necesita una conexin para determinar

la versin de la librera del cliente */


printf("Client library version: %d\n", mysqli_get_client_version());
?>

mysqli::get_connection_stats
mysqli_get_connection_stats

(PHP 5 >= 5.3.0)


mysqli::get_connection_stats -- mysqli_get_connection_stats Devuelve
estadsticas sobre la conexin del cliente
Descripcin
Estilo orientado a objetos
bool mysqli::get_connection_stats ( void )

Estilo por procedimientos


array mysqli_get_connection_stats ( mysqli $link )

Devuelve estadsticas sobre la conexin del cliente. Disponible slo con mysqlnd.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve un array con las estadsticas de la conexin si tiene xito, en otro
caso FALSE.
Ejemplos
Ejemplo #1 Un ejemplo de mysqli_get_connection_stats()

<?php
$link = mysqli_connect();
print_r(mysqli_get_connection_stats($link));
?>

El resultado del ejemplo sera algo similar a:


Array
(
[bytes_sent] => 43
[bytes_received] => 80
[packets_sent] => 1
[packets_received] => 2
[protocol_overhead_in] => 8
[protocol_overhead_out] => 4
[bytes_received_ok_packet] => 11
[bytes_received_eof_packet] => 0
[bytes_received_rset_header_packet] => 0
[bytes_received_rset_field_meta_packet] => 0
[bytes_received_rset_row_packet] => 0
[bytes_received_prepare_response_packet] => 0
[bytes_received_change_user_packet] => 0
[packets_sent_command] => 0
[packets_received_ok] => 1
[packets_received_eof] => 0
[packets_received_rset_header] => 0
[packets_received_rset_field_meta] => 0
[packets_received_rset_row] => 0
[packets_received_prepare_response] => 0
[packets_received_change_user] => 0
[result_set_queries] => 0
[non_result_set_queries] => 0
[no_index_used] => 0
[bad_index_used] => 0
[slow_queries] => 0
[buffered_sets] => 0

[unbuffered_sets] => 0
[ps_buffered_sets] => 0
[ps_unbuffered_sets] => 0
[flushed_normal_sets] => 0
[flushed_ps_sets] => 0
[ps_prepared_never_executed] => 0
[ps_prepared_once_executed] => 0
[rows_fetched_from_server_normal] => 0
[rows_fetched_from_server_ps] => 0
[rows_buffered_from_client_normal] => 0
[rows_buffered_from_client_ps] => 0
[rows_fetched_from_client_normal_buffered] => 0
[rows_fetched_from_client_normal_unbuffered] => 0
[rows_fetched_from_client_ps_buffered] => 0
[rows_fetched_from_client_ps_unbuffered] => 0
[rows_fetched_from_client_ps_cursor] => 0
[rows_skipped_normal] => 0
[rows_skipped_ps] => 0
[copy_on_write_saved] => 0
[copy_on_write_performed] => 0
[command_buffer_too_small] => 0
[connect_success] => 1
[connect_failure] => 0
[connection_reused] => 0
[reconnect] => 0
[pconnect_success] => 0
[active_connections] => 1
[active_persistent_connections] => 0
[explicit_close] => 0
[implicit_close] => 0
[disconnect_close] => 0
[in_middle_of_command_close] => 0
[explicit_free_result] => 0
[implicit_free_result] => 0
[explicit_stmt_close] => 0
[implicit_stmt_close] => 0

[mem_emalloc_count] => 0
[mem_emalloc_ammount] => 0
[mem_ecalloc_count] => 0
[mem_ecalloc_ammount] => 0
[mem_erealloc_count] => 0
[mem_erealloc_ammount] => 0
[mem_efree_count] => 0
[mem_malloc_count] => 0
[mem_malloc_ammount] => 0
[mem_calloc_count] => 0
[mem_calloc_ammount] => 0
[mem_realloc_count] => 0
[mem_realloc_ammount] => 0
[mem_free_count] => 0
[proto_text_fetched_null] => 0
[proto_text_fetched_bit] => 0
[proto_text_fetched_tinyint] => 0
[proto_text_fetched_short] => 0
[proto_text_fetched_int24] => 0
[proto_text_fetched_int] => 0
[proto_text_fetched_bigint] => 0
[proto_text_fetched_decimal] => 0
[proto_text_fetched_float] => 0
[proto_text_fetched_double] => 0
[proto_text_fetched_date] => 0
[proto_text_fetched_year] => 0
[proto_text_fetched_time] => 0
[proto_text_fetched_datetime] => 0
[proto_text_fetched_timestamp] => 0
[proto_text_fetched_string] => 0
[proto_text_fetched_blob] => 0
[proto_text_fetched_enum] => 0
[proto_text_fetched_set] => 0
[proto_text_fetched_geometry] => 0
[proto_text_fetched_other] => 0
[proto_binary_fetched_null] => 0

[proto_binary_fetched_bit] => 0
[proto_binary_fetched_tinyint] => 0
[proto_binary_fetched_short] => 0
[proto_binary_fetched_int24] => 0
[proto_binary_fetched_int] => 0
[proto_binary_fetched_bigint] => 0
[proto_binary_fetched_decimal] => 0
[proto_binary_fetched_float] => 0
[proto_binary_fetched_double] => 0
[proto_binary_fetched_date] => 0
[proto_binary_fetched_year] => 0
[proto_binary_fetched_time] => 0
[proto_binary_fetched_datetime] => 0
[proto_binary_fetched_timestamp] => 0
[proto_binary_fetched_string] => 0
[proto_binary_fetched_blob] => 0
[proto_binary_fetched_enum] => 0
[proto_binary_fetched_set] => 0
[proto_binary_fetched_geometry] => 0
[proto_binary_fetched_other] => 0
)

mysqli::$host_info
mysqli_get_host_info

(PHP 5)
mysqli::$host_info -- mysqli_get_host_info Devuelve una cadena que representa
el tipo de conexin usada
Descripcin
Estilo orientado a objetos

string $mysqli->host_info;

Estilo por procedimientos


string mysqli_get_host_info ( mysqli $link )

Devuelve una cadena que describiendo la conexin representada por el


parmetro link (incluyendo el nombre del servidor anfitrin).
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Una cadena de caracteres que representa el nombre del servidor anfitrin y el tipo
de conexin.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->host_info
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar informacin del host */
printf("Host info: %s\n", $mysqli->host_info);
/* cerrar conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar informacin del host */
printf("Host info: %s\n", mysqli_get_host_info($link));
/* cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Host info: Localhost via UNIX socket

mysqli::$protocol_version
mysqli_get_proto_info

(PHP 5)
mysqli::$protocol_version -- mysqli_get_proto_info Devuelve la versin del
protocolo MySQL utilizada
Descripcin
Estilo orientado a objetos
string $mysqli->protocol_version;

Estilo por procedimientos

int mysqli_get_proto_info ( mysqli $link )

Devuelve un valor entero que que representa la versin del protocolo de MySQL
utilizada por la conexin representada por el parmetro link.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve un valor entero que representa la versin del protocolo
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->protocol_version
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password");
/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar versin del protocolo */
printf("Protocol version: %d\n", $mysqli->protocol_version);
/* cerrar conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password");

/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar versin del protocolo */
printf("Protocol version: %d\n", mysqli_get_proto_info($link));
/* cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Protocol version: 10

mysqli::$server_info
mysqli_get_server_info

(PHP 5)
mysqli::$server_info -- mysqli_get_server_info Devuelve la versin del servidor
MySQL
Descripcin
Estilo orientado a objetos
string $mysqli->server_info;

Estilo por procedimientos


string mysqli_get_server_info ( mysqli $link )

Devuelve una cadena que representa la versin del servidor MySQL al que est
conectada la extensin MySQLi.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Una cadena de caracteres que representa la versin del servidor.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->server_info
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password");
/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar versin del servidor */
printf("Server version: %s\n", $mysqli->server_info);
/* cerrar conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password");

/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar versin del servidor */
printf("Server version: %s\n", mysqli_get_server_info($link));
/* cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Server version: 4.1.2-alpha-debug

mysqli::$server_version
mysqli_get_server_version

(PHP 5)
mysqli::$server_version -- mysqli_get_server_version Devuelve la versin del
servidor MySQL como un valor entero
Descripcin
Estilo orientado a objetos
int $mysqli->server_version;

Estilo por procedimientos


int mysqli_get_server_version ( mysqli $link )

La funcin mysqli_get_server_version() devuelve la versin del servidor al que


est conectado (representado por el parmetro link ) como un valor entero.

Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Un entero que representa la versin del servidor.
El patrn de este nmero de versin es main_version * 10000 + minor_version *
100 + sub_version (p.ej. versin 4.1.0 es 40100).
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->server_version
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password");
/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar versin del servidor */
printf("Server version: %d\n", $mysqli->server_version);
/* verificar conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* mostrar versin del servidor */
printf("Server version: %d\n", mysqli_get_server_version($link));
/* cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Server version: 40102

mysqli::get_warnings
mysqli_get_warnings

(PHP 5 >= 5.1.0)


mysqli::get_warnings -- mysqli_get_warnings Obtiene el resultado de SHOW
WARNINGS
Descripcin
Estilo orientado a objetos
mysqli_warning mysqli::get_warnings ( void )

Estilo por procedimientos


mysqli_warning mysqli_get_warnings ( mysqli $link )
Advertencia

Esta funcin no est documentada actualmente, solamente se encuentra


disponible la lista de parmetros.

mysqli::$info
mysqli_info

(PHP 5)
mysqli::$info -- mysqli_info Obtiene la informacin de la ltima consulta
ejecutada
Descripcin
Estilo orientado a objetos
string $mysqli->info;

Estilo por procedimientos


string mysqli_info ( mysqli $link )

La funcin mysqli_info() devuelve una cadena facilitando informacin sobre la


ltima consulta ejecutada. La naturaleza de esta cadena est indicada abajo:
Posibles valores de retorno de mysqli_info
Tipo de consulta

Ejemplo de cadena devuelta

INSERT INTO...SELECT...

Records: 100 Duplicates: 0 Warning

INSERT INTO...VALUES (...),(...),(...)

Records: 3 Duplicates: 0 Warnings:

LOAD DATA INFILE ...

Records: 1 Deleted: 0 Skipped: 0 W

ALTER TABLE ...

Records: 3 Duplicates: 0 Warnings:

UPDATE ...

Rows matched: 40 Changed: 40 Wa

Nota:

Las consultas que no estn incluidas en uno de los formatos anteriores no estn
soportadas. En estas situaciones, mysqli_info()devolver una cadena vaca.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Una cadena de caracteres representando informacin adicional sobre la ltima
consulta ejecutrada.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->info
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$mysqli->query("CREATE TEMPORARY TABLE t1 LIKE City");
/* INSERT INTO .. SELECT */
$mysqli->query("INSERT INTO t1 SELECT * FROM City ORDER BY ID LIMIT 150
");
printf("%s\n", $mysqli->info);
/* close connection */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TEMPORARY TABLE t1 LIKE City");
/* INSERT INTO .. SELECT */
mysqli_query($link, "INSERT INTO t1 SELECT * FROM City ORDER BY ID LIMIT
150");
printf("%s\n", mysqli_info($link));
/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Records: 150

Duplicates: 0

Warnings: 0

mysqli::init
mysqli_init

(PHP 5)
mysqli::init -- mysqli_init Inicializa y devuelve un recurso para utilizarlo con
mysqli_real_connect()

Descripcin
Estilo orientado a objetos
mysqli mysqli::init ( void )

Estilo por procedimientos


mysqli mysqli_init ( void )

Asigna o inicializa un objecto MySQL adecuado


para mysqli_options() y mysqli_real_connect().
Nota:
Cualquier llamada a cualquier funcin de mysqli (excepto mysqli_options()) fallar
hasta que mysqli_real_connect() sea llamada.
Valores devueltos
Devuelve un objeto.
Ejemplos
Veas mysqli_real_connect().

mysqli::$insert_id
mysqli_insert_id

(PHP 5)
mysqli::$insert_id -- mysqli_insert_id Devuelve el id autogenerado que se utiliz
en la ltima consulta
Descripcin
Estilo orientado a objetos
mixed $mysqli->insert_id;

Estilo por procedimientos

mixed mysqli_insert_id ( mysqli $link )

La funcin mysqli_insert_id() devuelve el ID generado por una consulta en una


tabla con una columna que tenga el atributo AUTO_INCREMENT. Si la ltima
consulta no fue una sentencia INSERT o UPDATE o si la tabla modificada no tiene
una columna con el atributo AUTO_INCREMENT, est funcin devolver cero.
Nota:
Realizar una sentencia INSERT o UPDATE usando la funcin LAST_INSERT_ID()
modificar el valor retornado por la funcinmysqli_insert_id().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
El valor de el campo AUTO_INCREMENT que fu actualizado por la consulta
anterior. Devuelve cero si no hubo una consulta previa en la conexin o si la
consulta no actualiza un valor AUTO_INCREMENT.
Nota:
Si el nmero es mayor que el valor mximo int, mysqli_insert_id() retornar un
string.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->insert_id
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Error de conexin: %s\n", mysqli_connect_error());

exit();
}
$mysqli->query("CREATE TABLE myCity LIKE City");
$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart
', 617000)";
$mysqli->query($query);
printf ("Nuevo registro con el id %d.\n", $mysqli->insert_id);
/* drop table */
$mysqli->query("DROP TABLE myCity");
/* close connection */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "mi_usuario", "mi_password", "world")
;
/* check connection */
if (mysqli_connect_errno()) {
printf("Error de conexin: %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TABLE myCity LIKE City");
$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttgart
', 617000)";
mysqli_query($link, $query);

printf ("Nuevo registro con el id %d.\n", mysqli_insert_id($link));


/* drop table */
mysqli_query($link, "DROP TABLE myCity");
/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Nuevo registro con el id 1.

mysqli::kill
mysqli_kill

(PHP 5)
mysqli::kill -- mysqli_kill Pide al servidor poner fin a un hilo de MySQL
Descripcin
Estilo orientado a objetos
bool mysqli::kill ( int $processid )

Estilo por procedimientos


bool mysqli_kill ( mysqli $link , int $processid )

Esta funcin se usa para pedir al servidor que ponga fin a un hilo MySQL
especificado por el parmetro processid. Este valor tiene que ser obtenido
llamando a la funcin mysqli_thread_id().
Para detener una consulta en ejecucin debe usarse el comando SQL KILL
QUERY processid.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::kill()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")

;
/* comprobar conexin */
if (mysqli_connect_errno()) {
printf("Conexin fallida: %s\n", mysqli_connect_error());
exit();
}
/* determinar el id de nuestro hilo */
$thread_id = $mysqli->thread_id;
/* Poner fin a la conexin */
$mysqli->kill($thread_id);
/* Esto debera producir un error */
if (!$mysqli->query("CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", $mysqli->error);
exit;
}
/* cerrar conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "world
");
/* comprobar conexin */
if (mysqli_connect_errno()) {
printf("Conexin fallida: %s\n", mysqli_connect_error());
exit();
}

/* determinar el id de nuestro hilo */


$thread_id = mysqli_thread_id($link);
/* Poner fin a la conexin */
mysqli_kill($link, $thread_id);
/* Esto debera producir un error */
if (!mysqli_query($link, "CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", mysqli_error($link));
exit;
}
/* cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Error: MySQL server has gone away

mysqli::more_results
mysqli_more_results

(PHP 5)
mysqli::more_results -- mysqli_more_results Comprueba si hay ms resultados
de una multi consulta
Descripcin
Estilo orientado a objetos
bool mysqli::more_results ( void )

Estilo por procedimientos

bool mysqli_more_results ( mysqli $link )

Indica si hay disponibles algn juego de resultados de alguna llamada previa


a mysqli_multi_query().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve TRUE si uno o ms conjuntos de resultados estn disponibles desde una
llamada anterior a mysqli_multi_query(), o de lo contrario devuelve FALSE.
Ejemplos
See mysqli_multi_query().

mysqli::multi_query
mysqli_multi_query

(PHP 5)
mysqli::multi_query -- mysqli_multi_query Realiza una consulta a la base de
datos
Descripcin
Estilo orientado a objetos
bool mysqli::multi_query ( string $query )

Estilo por procedimientos


bool mysqli_multi_query ( mysqli $link , string $query )

Ejecuta una o mltiples consultas concatenadas por puntos y comas.

Para obtener el juego de resultados de la primera consulta se puede


usar mysqli_use_result() o mysqli_store_result(). El resto de resultados de
consultas se pueden obtener usando mysqli_more_results() y mysqli_next_result().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
query

Consulta, en forma de string.


Los datos dentro de la consulta debe estar correctamente escapados.
Valores devueltos
Devuelve FALSE si la primera sentencia fall. Para obtener el resto de errores de
otras sentencias debe llamarse antes a mysqli_next_result().
Ejemplos
Ejemplo #1 Ejemplo de mysqli::multi_query()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
/* comprobar conexin */
if (mysqli_connect_errno()) {
printf("Conexin fallida: %s\n", mysqli_connect_error());
exit();
}
$query

= "SELECT CURRENT_USER();";

$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* ejecutar multi consulta */


if ($mysqli->multi_query($query)) {
do {
/* almacenar primer juego de resultados */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* mostrar divisor */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
}
/* cerrar conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "world
");
/* comprobar conexin */
if (mysqli_connect_errno()) {
printf("Conexin fallida: %s\n", mysqli_connect_error());
exit();
}
$query

= "SELECT CURRENT_USER();";

$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* ejecutar multi consulta */


if (mysqli_multi_query($link, $query)) {
do {
/* almacenar primer juego de resultados */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* mostrar divisor */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
}
/* cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran algo similar a:


my_user@localhost
----------------Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer

mysqli::next_result
mysqli_next_result

(PHP 5)

mysqli::next_result -- mysqli_next_result Prepara el siguiente resultado de


multi_query
Descripcin
Estilo orientado a objetos
bool mysqli::next_result ( void )

Estilo por procedimientos


bool mysqli_next_result ( mysqli $link )

Prepara el siguiente juego de resultados de una llamada


a mysqli_multi_query() que puede obtenerse con mysqli_store_result() o
conmysqli_use_result().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Ejemplos
See mysqli_multi_query().

mysqli::options
mysqli_options

(PHP 5)
mysqli::options -- mysqli_options Establecer opciones
Descripcin
Estilo orientado a objetos

bool mysqli::options ( int $option , mixed $value )

Estilo por procedimientos


bool mysqli_options ( mysqli $link , int $option , mixed $value )

Se usa para establecer opciones extra y para modificar al comportamiento de una


conexin.
Se puede llamar varias veces a esta funcin para establecer varias opciones.
mysqli_options() debera invocarse despus de mysqli_init() y antes
de mysqli_real_connect().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
opcin

Opcin que se desea establecer. Puede ser una de las siguientes.


Opciones vlidas
Nombre

Descripcin

MYSQLI_OPT_CONNECT_TIMEOUT

tiempo de expiracin en segundos de la conexin (sopor


5.3.1)

MYSQLI_OPT_LOCAL_INFILE

habilitar/deshabilitar el uso de LOAD LOCAL INFILE

MYSQLI_INIT_COMMAND

comando a ejecutar tras conectar al servidor MySQL

MYSQLI_READ_DEFAULT_FILE

Leer las opciones del fichero nombrado de opciones en l

MYSQLI_READ_DEFAULT_GROUP

Leer opciones del grupo nombrado de my.cnf o del fiche


conMYSQL_READ_DEFAULT_FILE.

MYSQLI_SERVER_PUBLIC_KEY

Fichero de clave pblica RSA usado con la autenticacin

value

Valor de la opcin.

Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Historial de cambios
Versin

Descripcin

5.5.0

Se aadi la opcin MYSQLI_SERVER_PUBLIC_KEY.

Ejemplos
Vea mysqli_real_connect().
Notas
Nota:
MySQLnd siempre utiliza el juego de caracteres de idioma predeterminado. El
juego de caracteres se enva en la autentificacin/acuerdo que se produce durante
la conexin, que utilizar mysqlnd.
Libmysqlclient utiliza el juego de caracteres predeterminado definido en my.cnf o
se puede establecer llamando mysqli_options() antes de
user mysqli_real_connect(), pero despus de mysqli_init().

mysqli::ping
mysqli_ping

(PHP 5)
mysqli::ping -- mysqli_ping Comprueba la conexin al servidor, o trata de
reconectar si se perdi la conexin
Descripcin
Estilo orientado a objetos
bool mysqli::ping ( void )

Estilo por procedimientos

bool mysqli_ping ( mysqli $link )

Comprueba si la conexin al servidor funciona. Si se ha perdido, y la opcin


global mysqli.reconnect est habilitada, se intenta realizar una reconexin
automtica.
Esta funcin la pueden utilizar clientes que permanecen inactivos por mucho
tiempo para comprobar si el servidor ha cerrado la conexin y reconectar si fuera
necesario.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::ping()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
/* comprobar la conexin */
if ($mysqli->connect_errno) {
printf("Conexin fallida: %s\n", $mysqli->connect_error);
exit();
}
/* comprobar si el servidor sigue vivo */
if ($mysqli->ping()) {
printf ("La conexin est bien!\n");
} else {

printf ("Error: %s\n", $mysqli->error);


}
/* cerrar la conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor
ld");
/* comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Conexin fallida: %s\n", mysqli_connect_error());
exit();
}
/* comprobar si el servidor sigue funcionando */
if (mysqli_ping($enlace)) {
printf ("La conexin est bien!\n");
} else {
printf ("Error: %s\n", mysqli_error($enlace));
}
/* cerrar la conexin */
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


La conexin est bien!

mysqli::poll

mysqli_poll

(PHP 5 >= 5.3.0)


mysqli::poll -- mysqli_poll Almacena en cach conexiones
Descripcin
Estilo orientado a objetos
public static int mysqli::poll ( array &$read , array &$error , array
&$reject , int $sec [, int $usec ] )

Estilo por procedimientos


int mysqli_poll ( array &$read , array &$error , array &$reject , in
t $sec [, int $usec ] )

Almacena en cach conexiones. Disponible slo con mysqlnd. Este mtodo puede
usarse como esttico.
Parmetros
read

Lista de conexiones a comprobar para resultados pendientes que se


pueden leer.
error

Lista de conexiones en las que ocurri un error, por ejemplo, fallo de


consulta o conexin perdida.
reject

Lista de conexiones rechazadas debido a que no se ha ejecutado ninguna


consulta asncrona para la que la funcin podra almacenar en cach
resultados.
sec

El nmero de segundos a esperar, debe ser no negativo.

usec

El nmero de microsegundos a esperar, debe ser no negativo.


Valores devueltos
Devuelve el nmero de conexiones si tiene xito, FALSE de otro modo.
Ejemplos
Ejemplo #1 Un ejemplo de mysqli_poll()
<?php
$enlace1 = mysqli_connect();
$enlace1->query("SELECT 'test'", MYSQLI_ASYNC);
$todos_los_enlaces = array($enlace1);
$procesado = 0;
do {
$enlaces = $errores = $rechazados = array();
foreach ($todos_los_enlaces as $enlace) {
$enlaces[] = $errores[] = $rechazados[] = $enlace;
}
if (!mysqli_poll($enlaces, $errores, $rechazados, 1)) {
continue;
}
foreach ($enlaces as $enlace) {
if ($resultado = $enlace->reap_async_query()) {
print_r($resultado->fetch_row());
if (is_object($resultado))
mysqli_free_result($resultado);
} else die(sprintf("MySQLi Error: %s", mysqli_error($enlace1)));
$procesado++;
}
} while ($procesado < count($todos_los_enlaces));
?>

El resultado del ejemplo sera:


Array
(

[0] => test


)

mysqli::prepare
mysqli_prepare

(PHP 5)
mysqli::prepare -- mysqli_prepare Prepara una sentencia SQL para su ejecucin
Descripcin
Estilo orientado a objetos
mysqli_stmt mysqli::prepare ( string $query )

Estilo por procedimientos


mysqli_stmt mysqli_prepare ( mysqli $link , string $query )

Prepara la consulta SQL y devuelve un manejador de sentencia para ser utilizado


por operaciones adicionales sobre la sentencia. La consulta debe constar de una
nica sentencia SQL.
Los marcadores de parmetros deben estar ligados a variables de aplicacin
utilizando mysqli_stmt_bind_param() y/omysqli_stmt_bind_result() antes de
ejecutar la sentencia u obtener las filas.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
query

La consulta, como un string.


Nota:

No se debe agregar un punto y coma o \g a la sentencia.


Este parmetro puede incluir uno o ms marcadores de parmetros en la
sentencia SQL mediante la incorporacin de caracteres de signo de
interrogacin (?) en las posiciones correctas.
Nota:
Los marcadores son legales solo en ciertos lugares en las sentencias SQL.
Por ejemplo, se les permite en la lista VALUES() de una
sentencia INSERT (para especificar valores de columna para una fila), o en
una comparacin con una columna en una clusulaWHERE para
especificar un valor de comparacin.
Sin embargo, no se les permite para identificadores (como nombres de
tabla o columna), en la lista de seleccin que nombra las columnas que se
devuelven mediante una sentencia SELECT, o para especificar ambos
operandos de un operador binario como el signo de igualdad =. Esta ltima
restriccin es necesaria debido a que sera imposible determinar el tipo de
parmetro. Tampoco est permitido comparar un marcador
con NULL mediante ? IS NULL. En general, los parmetros son legales
solamente en sentencias del Lenguaje de Manipulacin de Datos (DML) y
no en sentencias del Lenguaje de Definicin de Datos (DDL).
Valores devueltos
mysqli_prepare() devuelve un objeto de sentencia o FALSE si ocurre un error.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::prepare()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* verificar conexin */
if (mysqli_connect_errno()) {

printf("Connect failed: %s\n", mysqli_connect_error());


exit();
}
$city = "Amersfoort";
/* crear una sentencia preparada */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {
/* ligar parmetros para marcadores */
$stmt->bind_param("s", $city);
/* ejecutar la consulta */
$stmt->execute();
/* ligar variables de resultado */
$stmt->bind_result($district);
/* obtener valor */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
/* cerrar sentencia */
$stmt->close();
}
/* cerrar conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* verificar conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$city = "Amersfoort";
/* crear una sentencia preparada */
if ($stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?
")) {
/* ligar parmetros para marcadores */
mysqli_stmt_bind_param($stmt, "s", $city);
/* ejecutar la consulta */
mysqli_stmt_execute($stmt);
/* ligar variables de resultado */
mysqli_stmt_bind_result($stmt, $district);
/* obtener valor */
mysqli_stmt_fetch($stmt);
printf("%s is in district %s\n", $city, $district);
/* cerrar sentencia */
mysqli_stmt_close($stmt);
}
/* cerrar conexin */
mysqli_close($link);
?>

El resultado de los ejemplos seran:

Amersfoort is in district Utrecht

mysqli::query
mysqli_query

(PHP 5)
mysqli::query -- mysqli_query Realiza una consulta a la base de datos
Descripcin
Estilo orientado a objetos
mixed mysqli::query ( string $query [, int $resultmode =
MYSQLI_STORE_RESULT ] )

Estilo por procedimientos


mixed mysqli_query ( mysqli $link , string $query [, int $resultmode =
MYSQLI_STORE_RESULT ] )

Realiza una consulta dada por query a la base de datos.


Para consultas que no sean DML (distintas de INSERT, UPDATE o DELETE), esta
funcion es similar a invocar a mysqli_real_query() seguida
demysqli_use_result() o mysqli_store_result().
Nota:
En el caso de pasarle una sentencia a mysqli_query() que sea mayor del valor
de max_allowed_packet del servidor, los cdigos de error retornados diferirn
dependiendo de si se est usando el Controlador Nativo de MySQL (mysqlnd) o la
Biblioteca Cliente de MySQL (libmysqlclient). El comportamiento es el siguiente:
o

mysqlnd en Linux retorna un cdigo de error 1153. Este mensaje de error


significa que "se tiene un paquete mayor quemax_allowed_packet bytes".

mysqlnd en Windows retorna un cdigo de error 2006. Este mensaje de


error significa que "el servidor no est disponible".

libmysqlclient en toda las plataformas retorna el cdigo de error 2006. Este


mensaje de error significa que "el servidor no est disponible".

Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
query

La string de la consulta.
Los datos dentro de la consulta deberan estar adecuadamente escapados.
resultmode

La constante MYSQLI_USE_RESULT o MYSQLI_STORE_RESULT dependiendo del


compotamiento deseado. Por defecto, se usa la
constanteMYSQLI_STORE_RESULT.
Si se usa MYSQLI_USE_RESULT todas la llamadas posteriores retornarn con
un error Commands out of sync a menos que se llame amysqli_free_result()
Con MYSQLI_ASYNC (disponible con mysqlnd), es posible hacer consulta de
manera asncrona. mysqli_poll() se utiliza para obtener los resultados de
dichas consultas.
Valores devueltos
Retorna FALSE en caso de error. Si una consulta del tipo SELECT, SHOW,
DESCRIBE o EXPLAIN es exitosa, mysqli_query() retornar un
objetomysqli_result. Para otras consultas exitosas
de mysqli_query() retornar TRUE.

Historial de cambios
Versin

Descripcin

5.3.0

Se agreg la posibilidad de realizar consultas asncronas.

Ejemplos
Ejemplo #1 Ejemplo de mysqli::query()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* comprobar la conexin */
if ($mysqli->connect_errno) {
printf("Fall la conexin: %s\n", $mysqli->connect_error);
exit();
}
/* Crear una tabla que no devuelve un conjunto de resultados */
if ($mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City") === TRUE) {
printf("Se cre con xtio la tabla myCity.\n");
}
/* Consultas de seleccin que devuelven un conjunto de resultados */
if ($resultado = $mysqli->query("SELECT Name FROM City LIMIT 10")) {
printf("La seleccin devolvi %d filas.\n", $resultado->num_rows);
/* liberar el conjunto de resultados */
$resultado->close();
}
/* Si se ha de recuperar una gran cantidad de datos se emplea MYSQLI_USE_
RESULT */
if ($resultado = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT))
{

/* Observar que no se puede ejecutar ninguna funcin que interactue c


on el
servidor hasta que el conjunto de resultados se haya cerrado. Toda
s las llamadas devolvern un
error 'out of sync' */
if (!$mysqli->query("SET @a:='esto no funcionar'")) {
printf("Error: %s\n", $mysqli->error);
}
$resultado->close();
}
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* Crear una tabla que no devuelve un conjunto de resultados */
if (mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City") === TR
UE) {
printf("Se cre con xtio la tabla myCity.\n");
}
/* Consultas de seleccin que devuelven un conjunto de resultados */
if ($resultado = mysqli_query($link, "SELECT Name FROM City LIMIT 10")) {
printf("La seleccin devolvi %d filas.\n", mysqli_num_rows($resultad
o));

/* liberar el conjunto de resultados */


mysqli_free_result($resultado);
}
/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT *
/
if ($resultado = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RES
ULT)) {
/* Observar que no se puede ejecutar ninguna funcin que interactue c
on el
servidor hasta que el conjunto de resultados se haya cerrado. Toda
s las llamadas devolvern un
error 'out of sync' */
if (!mysqli_query($link, "SET @a:='esto no funcionar'")) {
printf("Error: %s\n", mysqli_error($link));
}
mysqli_free_result($resultado);
}
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Se cre con xtio la tabla myCity.
La seleccin devolvi 10 filas.
Error: Commands out of sync;

mysqli::real_connect
mysqli_real_connect

(PHP 5)

You can't run this command now

mysqli::real_connect -- mysqli_real_connect Abre una conexin a un servidor


mysql
Descripcin
Estilo orientado a objetos
bool mysqli::real_connect ([ string $host [, string $username [, string $pa
sswd [, string $dbname [, int $port [, string$socket [, int $flags ]]]]]]

] )

Estilo por procedimientos


bool mysqli_real_connect ( mysqli $link [, string $host [, string $userna
me [, string $passwd [, string $dbname [, int$port [, string $socket [, in

t $flags ]]]]]]] )

Establece una conexin a un motor de bases de datos MySQL.


Esta funcin difiere de mysqli_connect() en:
o

mysqli_real_connect() necesita un objeto vlido que haya sido creado por la


funcin mysqli_init().
Con la funcin mysqli_options() se pueden establecer varias opciones de
conexin.
Existe un parmetro flags.

Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
host

Puede ser un nombre de host o una direccin IP. Si se pasa el valor NULL o
la cadena "localhost" a este parmetro, se asume el host local. Cuando sea
posible se usarn tuberas en lugar del protocolo TCP/IP.

username

El nombre de usuario de MySQL.


passwd

Si se proporciona o es NULL, el servidor MySQL intentar autenticar al


usuario con los registros de usuarios que solamente no tengan contrasea.
Esto permite a un nombre de usuario que sea usado con diferentes
permisos (dependiendo de si se proporciona una contrasea o no).
dbname

Si se proporciona, especificar la base de datos predeterminada a ser


usada para realizar consultas.
port

Especifica el nmero de puerto con el que intentar conectarse al servidor


MySQL.
socket

Especifica el socket o la tubera con nombre que debera usarse.


Nota:
Especificar el parmetro socket no determinar explcitamente el tipo de
conexin a usar al conectarse al servidor MySQL. El modo de realizar la
conexin a la base de datos de MySQL est determinado por el
parmetro host.
flags

Con el parmetro flags se pueden establecer diferentes opciones de


conexin:
Banderas soportadas
Nobre

Descripcin

MYSQLI_CLIENT_COMPRESS

Usar el protocolo de compresin

Banderas soportadas
Nobre

Descripcin

MYSQLI_CLIENT_FOUND_ROWS

Devolver el nmero de filas coincidentes, no el nmero de fi

MYSQLI_CLIENT_IGNORE_SPACE Permitir espacios despus de los nombres de funciones. Hac

sean palabras reservadas.


MYSQLI_CLIENT_INTERACTIVE

Permite interactive_timeout segundos (en vez de wait_timeo


cerrar la conexin

MYSQLI_CLIENT_SSL

Usar SSL (encriptacin)

Nota:
Por razones de seguridad la bandera MULTI_STATEMENT no est soportada
en PHP. Si quiere ejecutar mltiples consultas use la
funcin mysqli_multi_query().
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::real_connect()
Estilo orientado a objetos
<?php
$mysqli = mysqli_init();
if (!$mysqli) {
die('Fall mysqli_init');
}
if (!$mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('Fall la configuracin de MYSQLI_INIT_COMMAND');
}
if (!$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Fall la configuracin de MYSQLI_OPT_CONNECT_TIMEOUT');

}
if (!$mysqli->real_connect('localhost', 'mi_usuario', 'mi_contrasea', 'm
i_bd')) {
die('Error de conexin (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'xito... ' . $mysqli->host_info . "\n";
$mysqli->close();
?>

Estilo orientado a objetos al extender la clase mysqli


<?php
class foo_mysqli extends mysqli {
public function __construct($host, $usuario, $contrasea, $bd) {
parent::init();
if (!parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0'))
{
die('Fall la configuracin de MYSQLI_INIT_COMMAND');
}
if (!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Fall la configuracin de MYSQLI_OPT_CONNECT_TIMEOUT');
}
if (!parent::real_connect($host, $usuario, $contrasea, $bd)) {
die('Error de conexin (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}

$bd = new foo_mysqli('localhost', 'mi_usuario', 'mi_contrasea', 'mi_bd')


;
echo 'xito... ' . $bd->host_info . "\n";
$bd->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_init();
if (!$enlace) {
die('Fall mysqli_init');
}
if (!mysqli_options($enlace, MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0'))
{
die('Fall la configuracin de MYSQLI_INIT_COMMAND');
}
if (!mysqli_options($enlace, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Fall la configuracin de MYSQLI_OPT_CONNECT_TIMEOUT');
}
if (!mysqli_real_connect($enlace, 'localhost', 'mi_usuario', 'mi_contrase
a', 'mi_bd')) {
die('Error de conexin (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
echo 'xito... ' . mysqli_get_host_info($enlace) . "\n";

mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


xito... MySQL host info: localhost via TCP/IP

Notas
Nota:
MySQLnd siempre utiliza el juego de caracteres de idioma predeterminado. El
juego de caracteres se enva en la autentificacin/acuerdo que se produce durante
la conexin, que utilizar mysqlnd.
Libmysqlclient utiliza el juego de caracteres predeterminado definido en my.cnf o
se puede establecer llamando mysqli_options() antes de
user mysqli_real_connect(), pero despus de mysqli_init().

mysqli::real_escape_string
mysqli_real_escape_string

(PHP 5)
mysqli::real_escape_string -- mysqli_real_escape_string Escapa los caracteres
especiales de una cadena para usarla en una sentencia SQL, tomando en cuenta
el conjunto de caracteres actual de la conexin
Descripcin
Estilo orientado a objetos
string mysqli::escape_string ( string $escapestr )
string mysqli::real_escape_string ( string $escapestr )

Estilo por procedimientos

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

Esta funcin se usa para crear una cadena SQL legal que se puede usar en una
sentencia SQL. La cadena dada es codificada a una cadena SQL escapada,
tomando en cuenta el conjunto de caracteres actual de la conexin.
Precaucin
Seguridad: el conjunto de caracteres predeterminado

El conjunto de caracteres debe ser establecido a nivel del servidor, o con la


funcin mysqli_set_charset() de la API para que afecte
amysqli_real_escape_string(). Vase la seccin de conceptos sobre conjuntos de
caracteres para ms informacin.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
escapestr

La cadena a escapar.
Los caracters codifcados son NUL (ASCII 0), \n, \r, \, ', ", y Control-Z.
Valores devueltos
Devuelve una cadena escapada.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::real_escape_string()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
/* verificar la conexin */

if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
$mysqli->query("CREATE TEMPORARY TABLE miCiudad LIKE City");
$ciudad = "'s Hertogenbosch";
/* esta consulta fallar debido a que no escapa $ciudad */
if (!$mysqli->query("INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
printf("Error: %s\n", $mysqli->sqlstate);
}
$ciudad = $mysqli->real_escape_string($ciudad);
/* esta consulta con $ciudad escapada funcionar */
if ($mysqli->query("INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
printf("%d fila insertada.\n", $mysqli->affected_rows);
}
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor
ld");
/* verificar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}

mysqli_query($enlace, "CREATE TEMPORARY TABLE miCiudad LIKE City");


$ciudad = "'s Hertogenbosch";
/* esta consulta fallar debido a que no escapa $ciudad */
if (!mysqli_query($enlace, "INSERT into miCiudad (Name) VALUES (
'$ciudad')")) {
printf("Error: %s\n", mysqli_sqlstate($enlace));
}
$ciudad = mysqli_real_escape_string($enlace, $ciudad);
/* esta consulta con $ciudad escapada funcionar */
if (mysqli_query($enlace, "INSERT into miCiudad (Name) VALUES ('$ciudad')
")) {
printf("%d fila insertada.\n", mysqli_affected_rows($enlace));
}
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


Error: 42000
1 fila insertada.

Notas
Nota:
Para quienes estn acostumbrados a usar mysql_real_escape_string(), se ha de
observar que el argumento demysqli_real_escape_string() difiere de lo que
espera mysql_real_escape_string(). El identificador enlace va primero
enmysqli_real_escape_string(), mientras que la cadena a escapar va primero
en mysql_real_escape_string().

mysqli::real_query
mysqli_real_query

(PHP 5)
mysqli::real_query -- mysqli_real_query Ejecuta una consulta SQL
Descripcin
Estilo orientado a objetos
bool mysqli::real_query ( string $query )

Estilo por procedimientos


bool mysqli_real_query ( mysqli $link , string $query )

Ejecuta una sola consulta contra la base de datos cuyo resultado puede ser
recuperado o almacenado mediante las
funcionesmysqli_store_result() o mysqli_use_result().
Con el fin de determinar si una consulta dada debe devolver un conjunto de
resultados o no, ver mysqli_field_count().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
query

La consulta como un string.


Los datos dentro de la consulta deben estar apropiadamente escapados.
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.

mysqli::reap_async_query
mysqli_reap_async_query

(PHP 5 >= 5.3.0)


mysqli::reap_async_query -- mysqli_reap_async_query Obtiene el resultado de
una consulta asincrnica
Descripcin
Estilo orientado a objetos
public mysqli_result mysqli::reap_async_query ( void )

Estilo por procedimientos


mysqli_result mysqli_reap_async_query ( mysql $link )

Obtiene el resultado de una consulta asincrnica. Disponible slo con mysqlnd.


Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve mysqli_result en caso de xito, FALSE en caso contrario.

mysqli::refresh
mysqli_refresh

(PHP 5 <= 5.3.0)

mysqli::refresh -- mysqli_refresh Refresca


Descripcin
Estilo orientado a objetos
public bool mysqli::refresh ( int $options )

Estilo por procedimientos


int mysqli_refresh ( resource $link , int $options )

Vaca las tablas o caches, o restablece la informacin de replicacin de servidores.


Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
options

Las opciones para refrescar, utilizando las constantes


MYSQLI_REFRESH_* tal como se documenta en las constantes MySQLi.
Ver tambin la documentiacin oficial de MySQL Refresh
Valores devueltos
TRUE

si el refresh fue exitoso, FALSE en caso contrario.

mysqli::release_savepoint
mysqli_release_savepoint

(PHP 5 >= 5.5.0)


mysqli::release_savepoint -- mysqli_release_savepoint Elimina el punto salvado
con nombre del conjunto de puntos salvados de la transaccin actual

Descripcin
Estilo orientado a objetos (method):
public bool mysqli::release_savepoint ( string $name )

Estilo por procedimientos:


bool mysqli_release_savepoint ( mysqli $link , string $name )
Advertencia

Esta funcin no est documentada actualmente, solamente se encuentra


disponible la lista de parmetros.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
name

Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.

mysqli::rollback
mysqli_rollback

(PHP 5)
mysqli::rollback -- mysqli_rollback Revierte la transaccin actual
Descripcin
Estilo orientado a objetos
bool mysqli::rollback ([ int $flags [, string $name ]] )

Estilo por procedimientos


bool mysqli_rollback ( mysqli $link [, int $flags [, string $name ]] )

Revierte la transaccin actual de la base de datos.


Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
flags

Una mscara de bits de constantes MYSQLI_TRANS_COR_*.


name

Si se proporciona, se ejecuta ROLLBACK/*name*/.


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Historial de cambios
Versin

Descripcin

5.5.0

Se aadieron los parmetros flags y name.

Ejemplos
Ejemplo #1 Ejemplo de mysqli::rollback()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* verificar la conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* deshabilitar autocommit */
$mysqli->autocommit(FALSE);
$mysqli->query("CREATE TABLE myCity LIKE City");
$mysqli->query("ALTER TABLE myCity Type=InnoDB");
$mysqli->query("INSERT INTO myCity SELECT * FROM City LIMIT 50");
/* insertar commit */
$mysqli->commit();
/* borrar todas las filas */
$mysqli->query("DELETE FROM myCity");
if ($result = $mysqli->query("SELECT COUNT(*) FROM myCity")) {
$row = $result->fetch_row();
printf("%d rows in table myCity.\n", $row[0]);
/* Liberar resultado */
$result->close();
}
/* Revertir */
$mysqli->rollback();
if ($result = $mysqli->query("SELECT COUNT(*) FROM myCity")) {
$row = $result->fetch_row();
printf("%d rows in table myCity (after rollback).\n", $row[0]);
/* Liberar resultado */
$result->close();
}
/* Eliminar la tabla myCity */
$mysqli->query("DROP TABLE myCity");
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* verificar la conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* deshabilitar autocommit */
mysqli_autocommit($link, FALSE);
mysqli_query($link, "CREATE TABLE myCity LIKE City");
mysqli_query($link, "ALTER TABLE myCity Type=InnoDB");
mysqli_query($link, "INSERT INTO myCity SELECT * FROM City LIMIT 50");
/* insertar commit */
mysqli_commit($link);
/* borrar todas las filas */
mysqli_query($link, "DELETE FROM myCity");
if ($result = mysqli_query($link, "SELECT COUNT(*) FROM myCity")) {
$row = mysqli_fetch_row($result);
printf("%d rows in table myCity.\n", $row[0]);
/* Liberar resultado */
mysqli_free_result($result);
}
/* Revertir */
mysqli_rollback($link);
if ($result = mysqli_query($link, "SELECT COUNT(*) FROM myCity")) {
$row = mysqli_fetch_row($result);

printf("%d rows in table myCity (after rollback).\n", $row[0]);


/* Liberar resultado */
mysqli_free_result($result);
}
/* Eliminar la tabla myCity */
mysqli_query($link, "DROP TABLE myCity");
mysqli_close($link);
?>

El resultado de los ejemplos seran:


0 rows in table myCity.
50 rows in table myCity (after rollback).

mysqli::rpl_query_type
mysqli_rpl_query_type

(PHP 5)
mysqli::rpl_query_type -- mysqli_rpl_query_type Devuelve un tipo de consulta
RPL
Descripcin
Estilo orientado a objetos
int mysqli::rpl_query_type ( string $query )

Estilo por procedimientos


int mysqli_rpl_query_type ( mysqli $link , string $query )

Devuelve MYSQLI_RPL_MASTER, MYSQLI_RPL_SLAVE o MYSQLI_RPL_ADMIN dependiendo


del tipo de consulta. INSERT, UPDATE y similares son
consultas master, SELECT es slave, y FLUSH, REPAIR y similares son admin.

Advertencia

Esta funcin no est documentada actualmente, solamente se encuentra


disponible la lista de parmetros.
Advertencia

Esta funcin ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli::savepoint
mysqli_savepoint

(PHP 5 >= 5.5.0)


mysqli::savepoint -- mysqli_savepoint Define el nombre de un punto de
salvaguarda de la transaccin
Descripcin
Estilo orientado a objetos (method):
public bool mysqli::savepoint ( string $name )

Estilo por procedimientos:


bool mysqli_savepoint ( mysqli $link , string $name )
Advertencia

Esta funcin no est documentada actualmente, solamente se encuentra


disponible la lista de parmetros.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

name

Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.

mysqli::select_db
mysqli_select_db

(PHP 5)
mysqli::select_db -- mysqli_select_db Selecciona la base de datos por defecto
para realizar las consultas
Descripcin
Estilo orientado a objetos
bool mysqli::select_db ( string $dbname )

Estilo por procedimientos


bool mysqli_select_db ( mysqli $link , string $dbname )

Selecciona la base de datos por defecto que se utilizar para realizar las
consultas, en la conexin activa.
Nota:
Esta funcin debera ser usada solo para cambiar la base de datos por defecto
para la conexin. Se puede seleccionar la base de datos por defecto en el cuarto
parmetro de la funcin mysqli_connect().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

dbname

El nombre de la base de datos.


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::select_db()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
/* comprueba la conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* devuelve el nombre de la base de datos actualmente seleccionada */
if ($result = $mysqli->query("SELECT DATABASE()")) {
$row = $result->fetch_row();
printf("Default database is %s.\n", $row[0]);
$result->close();
}
/* cambia de test bd a world bd */
$mysqli->select_db("world");
/* devuelve el nombre de la base de datos actualmente seleccionadae */
if ($result = $mysqli->query("SELECT DATABASE()")) {
$row = $result->fetch_row();
printf("Default database is %s.\n", $row[0]);
$result->close();
}

$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "test");
/* comprueba la conexin */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
/* devuelve el nombre de la base de datos actualmente seleccionada */
if ($result = mysqli_query($link, "SELECT DATABASE()")) {
$row = mysqli_fetch_row($result);
printf("Default database is %s.\n", $row[0]);
mysqli_free_result($result);
}
/* cambia de test bd a world bd */
mysqli_select_db($link, "world");
/* devuelve el nombre de la base de datos actualmente seleccionada */
if ($result = mysqli_query($link, "SELECT DATABASE()")) {
$row = mysqli_fetch_row($result);
printf("Default database is %s.\n", $row[0]);
mysqli_free_result($result);
}
mysqli_close($link);
?>

El resultado de los ejemplos seran:

Default database is test.


Default database is world.

mysqli::send_query
mysqli_send_query

(PHP 5)
mysqli::send_query -- mysqli_send_query Enviar una consulta y devolver
Descripcin
Estilo orientado a objetos
bool mysqli::send_query ( string $query )

Estilo por procedimientos


bool mysqli_send_query ( mysqli $link , string $query )
Advertencia

Esta funcin no est documentada actualmente, solamente se encuentra


disponible la lista de parmetros.
Advertencia

Esta funcin ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli::set_charset
mysqli_set_charset

(PHP 5 >= 5.0.5)

mysqli::set_charset -- mysqli_set_charset Establece el conjunto de caracteres


predeterminado del cliente
Descripcin
Estilo orientado a objetos
bool mysqli::set_charset ( string $charset )

Estilo por procedimientos


bool mysqli_set_charset ( mysqli $link , string $charset )

Establece el conjunto de caracteres predeterminado a usar cuando se envan


datos desde y hacia el servidor de la base de datos.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
charset

El conjunto de caracteres a establecer como predeterminado.


Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.
Notas
Nota:
Para usar esta funcin en una plataforma Windows se necesita la biblioteca cliente
de MySQL version 4.1.11 o superior (para MySQL 5.0 se necesita 5.0.6 o
superior).
Nota:

Esta es la mejor forma de cambiar el conjunto de caracteres. No se recomienda


usar mysqli_query() para establecerlo (como SET NAMES utf8). Vase la
seccin Conceptos del conjunto de caracteres de MySQL para ms informacin.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::set_charset()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "test");
/* verificar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* cambiar el conjunto de caracteres a utf8 */
if (!$mysqli->set_charset("utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", $mysqli
->error);
} else {
printf("Conjunto de caracteres actual: %s\n", $mysqli>character_set_name());
}
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect('localhost', 'mi_usuario', 'mi_contrasea', 'tes
t');
/* verificar la conexin */

if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* cambiar el conjunto de caracteres a utf8 */
if (!mysqli_set_charset($enlace, "utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", mysqli_
error($enlace));
} else {
printf("Conjunto de caracteres actual: %s\n", mysqli_character_set_na
me($enlace));
}
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


Conjunto de caracteres actualt: utf8

mysqli::set_local_infile_default
mysqli_set_local_infile_default

(PHP 5)
mysqli::set_local_infile_default -- mysqli_set_local_infile_default Desestablece el
gestor definido por el usuario para un comando load local infile
Descripcin
void mysqli_set_local_infile_default ( mysqli $link )

Desactiva un gestor LOAD DATA INFILE LOCAL previamente establecido


con mysqli_set_local_infile_handler().

Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
No devuelve ningn valor.
Ejemplos
Vase el ejemplo de mysqli_set_local_infile_handler()

mysqli::set_local_infile_handler
mysqli_set_local_infile_handler

(PHP 5)
mysqli::set_local_infile_handler -- mysqli_set_local_infile_handler Establecer la
llamada de retorno para el comando LOAD DATA LOCAL INFILE
Descripcin
Estilo orientado a objetos
bool mysqli::set_local_infile_handler ( mysqli $link , callable $read_func
)

Estilo por procedimientos


bool mysqli_set_local_infile_handler ( mysqli $link , callable $read_func
)

Establece la llamada de retorno para el comando LOAD DATA LOCAL INFILE

La tarea de la llamada de retorno es leer la entrada desde un fichero especificado


en LOAD DATA LOCAL INFILE y reformatearla al formato entendido por LOAD
DATA INFILE.
Los datos devueltos necesitan coincidir con el formato especificado en LOAD
DATA
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
read_func

Una llamada de retorno o un mtodo de un objeto que toma los siguientes


parmetros:
stream

Un flujo de PHP asociado con los comandos INFILE de SQL


&buffer

Un buffer de cadena donde almacenar la entrada reescrita


buflen

El nmero mximo de caracteres a almacenar en el buffer


&errormsg

Si ocurre un error se puede almacenar un mensaje de error aqu


La llamada de retorno debera devolver el nmero de caracters almacenados en
el buffer o un valor negativo si ocurriera un error.
Valores devueltos
Devuelve TRUE en caso de xito o FALSE en caso de error.

Ejemplos
Ejemplo #1 Ejemplo de mysqli::set_local_infile_handler()
Estilo orientado a objetos
<?php
$db = mysqli_init();
$db->real_connect("localhost","root","","test");
function callme($stream, &$buffer, $buflen, &$errmsg)
{
$buffer = fgets($stream);
echo $buffer;
// convertir a maysculas y reemplazar el delimitador "," con [TAB]
$buffer = strtoupper(str_replace(",", "\t", $buffer));
return strlen($buffer);
}

echo "Entrada:\n";
$db->set_local_infile_handler("callme");
$db->query("LOAD DATA LOCAL INFILE 'input.txt' INTO TABLE t1");
$db->set_local_infile_default();
$res = $db->query("SELECT * FROM t1");
echo "\nResultado:\n";
while ($fila = $res->fetch_assoc()) {
echo join(",", $fila)."\n";
}
?>

Estilo por procedimientos

<?php
$db = mysqli_init();
mysqli_real_connect($db, "localhost","root","","test");
function callme($stream, &$buffer, $buflen, &$errmsg)
{
$buffer = fgets($stream);
echo $buffer;
// convertir a maysculas y reemplazar el delimitador "," con [TAB]
$buffer = strtoupper(str_replace(",", "\t", $buffer));
return strlen($buffer);
}

echo "Entrada:\n";
mysqli_set_local_infile_handler($db, "callme");
mysqli_query($db, "LOAD DATA LOCAL INFILE 'input.txt' INTO TABLE t1");
mysqli_set_local_infile_default($db);
$res = mysqli_query($db, "SELECT * FROM t1");

echo "\nResultado:\n";
while ($fila = mysqli_fetch_assoc($res)) {
echo join(",", $fila)."\n";
}
?>

El resultado de los ejemplos seran:


Entrada:
23,foo

42,bar
Resultado:
23,FOO
42,BAR

mysqli::$sqlstate
mysqli_sqlstate

(PHP 5)
mysqli::$sqlstate -- mysqli_sqlstate Devuelve el error SQLSTATE de la
operacin de MySQL previa
Descripcin
Estilo orientado a objetos
string $mysqli->sqlstate;

Estilo por procedimientos


string mysqli_sqlstate ( mysqli $link )

Devuelve una cadena que contiene el cdigo de error SQLSTATE del ltimo error.
El cdigo de error consiste en cinco caracteres. '00000'significa sin error. Los
valores son especificados por ANSI SQL y ODBC. Para una lista de los posibles
valores, vase http://dev.mysql.com/doc/mysql/en/error-handling.html.
Nota:
Observe que no todos los errores de MySQL estn an referenciados a
SQLSTATE. El valor HY000 (error general error) se utiliza para error no
referenciados.

Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve una cadena que contiene el cdigo de error SQLSTATE del ltimo error.
El cdigo de error consiste en cinco caracteres. '00000'significa sin error.
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->sqlstate
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
/* Comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* La tabla City ya existe, por lo que deberamos obtener un error */
if (!$mysqli->query("CREATE TABLE City (ID INT, Name VARCHAR(30))")) {
printf("Error - SQLSTATE %s.\n", $mysqli->sqlstate);
}
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor
ld");

/* Comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* La tabla City ya existe, por lo que deberamos obtener un error */
if (!mysqli_query($enlace, "CREATE TABLE City (ID INT, Name VARCHAR(30))
")) {
printf("Error - SQLSTATE %s.\n", mysqli_sqlstate($enlace));
}
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


Error - SQLSTATE 42S01.

mysqli::ssl_set
mysqli_ssl_set

(PHP 5)
mysqli::ssl_set -- mysqli_ssl_set Usada para establece conexiones seguras
usando SSL
Descripcin
Estilo orientado a objetos
bool mysqli::ssl_set ( string $key , string $cert , string $ca , string $cap
ath , string $cipher )

Estilo por procedimientos

bool mysqli_ssl_set ( mysqli $link , string $key , string $cert , string $


ca , string $capath , string $cipher )

Usada para establece conexiones seguras usando SSL. Se debe llamar antes
a mysqli_real_connect(). Esta funcin no har nada a menos que est habilitado el
soporte para OpenSSL.
Observe que el Controlador Nativo de MySQL no soporta SSL antes de PHP 5.3.3,
por lo que llamar a esta funcin cuando se utiliza el Controlador Nativo de MySQL
resultar en un error. El Controlador Nativo de MySQL est habilitado de forma
predeterminada en Microsoft Windows desde la versin 5.3 de PHP en adelante.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
key

El nombre de la ruta al fichero de clave.


cert

El nombre de la ruta al fichero de certificado.


ca

El nombre de la ruta al fichero de autoridad certificadora.


capath

El nombre de la ruta al directorio que contiene los certificados AC SSL de


confiaza en formato PEM.
cipher

Una lista de cifradores permisibles a usar para la encriptacin SSL.


Cualquier parmetro SSL sin usar puede darse como NULL

Valores devueltos
Esta funcin siempres devuelve el valor TRUE. Si la configuracin de SSL no es
correcta, mysqli_real_connect() devolver un error al intentar conectarse.

mysqli::stat
mysqli_stat

(PHP 5)
mysqli::stat -- mysqli_stat Obtiene el estado actual del sistema
Descripcin
Estilo orientado a objetos
string mysqli::stat ( void )

Estilo por procedimientos


string mysqli_stat ( mysqli $link )

mysqli_stat() devuelve una cadena que contiene informacin similar a la


proporcionada por el comando 'mysqladmin status'. Incluye el tiempo en
funcionamiento en segundos y el nmero de hilos en ejecucin, de preguntas, de
recargas y de tablas abiertas.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Una cadena que describe el estado del servidor. FALSE si ocurri un error.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::stat()

Estilo orientado a objetos


<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
/* comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
printf ("Estado del sistema: %s\n", $mysqli->stat());
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor
ld");
/* comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
printf("Estado del sistema: %s\n", mysqli_stat($enlace));
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:

Estado del sistema: Uptime: 272

Threads: 1

Questions: 5340

Slow

queries: 0
Opens: 13

Flush tables: 1

Open tables: 0

Queries per second avg:

19.632
Memory in use: 8496K

Max memory used: 8560K

e a cualquier funcin de mysqli_stmt fallar a menos que se llame antes


a mysqli_stmt_prepare().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Returns an object.

mysqli::store_result
mysqli_store_result

(PHP 5)
mysqli::store_result -- mysqli_store_result Transfiere un conjunto de resulados
de la ltima consulta
Descripcin
Estilo orientado a objetos
mysqli_result mysqli::store_result ([ int $option ] )

Estilo por procedimientos


mysqli_result mysqli_store_result ([ int $option ] )

Transfiere el conjunto de resultados de la ltima consulta de la conexin a la base


de datos representada por el parmetro link a ser usado con la
funcin mysqli_data_seek().
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
option

La opcin a establecer. Puede ser uno de los siguientes valores:


Opciones vlidas
Nombre

Descripcin

MYSQLI_STORE_RESULT_COPY_DAT Copiar los resultados desde el bfer interno de mysqlnd a


A
usar un lgica de referencia para evitar copiar y duplicar

ciertos conjuntos de resultados con filas muy pequeas, p


reducir el uso total de memoria debido a que las variable
ser liberadas antes (disponible con mysqlnd solamente, d

Valores devueltos
Devuelve un objeto de resultados almacenado en buffer o FALSE si ocurri un error.
Nota:
mysqli_store_result() devuelve FALSE en caso de que la consulta no devuelve un
conjunto de resultados (si la consulta era, por ejemplo, una sentencia INSERT).
Esta funcin tambin devuelve FALSE si la lectura del conjunto de resultados falla.
Se puede coprobar si se ha obtenido un error comprobando si mysqli_error() no
devuelve una cadena vaca, si mysqli_errno() devuelve un valor distinto de cero, o
simysqli_field_count() devuelve un valor distinto de cero. Otra posible razn para
que esta funcin devuelva FALSE despus de una llamada con xito
a mysqli_query() puede ser un conjunto de resultados demasiado grande (no es

posible asignarle memoria). Simysqli_field_count() deveulve un valor distinto de


cero, la sentencia debera haber producido un conjunto de resultados no vaco.
Notas
Nota:
Aunque es una buena prctica liberar la memoria usada por los resultados de una
consulta usando la funcin mysqli_free_result(), al transferir conjuntos de
resultados grandes usando la funcin mysqli_store_result() esto se convierte en
particularmente importante.
Ejemplos
Vase mysqli_multi_query().

mysqli::$thread_id
mysqli_thread_id

(PHP 5)
mysqli::$thread_id -- mysqli_thread_id Deveulve el ID del hilo de la conexin
actual
Descripcin
Estilo orientado a objetos
int $mysqli->thread_id;

Estilo por procedimientos


int mysqli_thread_id ( mysqli $link )

La funcin mysqli_thread_id() devuelve el ID del hilo de la conexin actual, el cual


puede ser destruido usando la funcin mysqli_kill(). Si se pierde la conexin y se
reconecta con mysqli_ping(), el ID del hilo ser otro. Por lo tanto se debera
obtener el ID del hilo nicamente cuando se necesite.

Nota:
El ID del hilo es asignado basndose en una conexin-por-conexin. Por lo tanto,
si la conexin se pierde y se restablece se asignar un nuevo ID de hio.
Para destruir una consulta en ejecucin se puede usar el comando SQL KILL
QUERY id_proceso.
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()
Valores devueltos
Devuelve el ID del hilo de la conexin actual.
Ejemplos
Ejemplo #1 Ejemplo $mysqli->thread_id
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")
;
/* comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* determinar el id del hilo */
$id_hilo = $mysqli->thread_id;
/* Destruir la conexin */
$mysqli->kill($id_hilo);

/* Esto debera producir un error */


if (!$mysqli->query("CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", $mysqli->error);
exit;
}
/* cerrar la conexin */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor
ld");
/* comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
/* determinar el id del hilo */
$id_hilo = mysqli_thread_id($enlace);
/* Destruir la conexin */
mysqli_kill($enlace, $id_hilo);
/* Esto debera producir un error */
if (!mysqli_query($enlace, "CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", mysqli_error($enlace));
exit;
}
/* cerrar la conexin */

mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


Error: MySQL server has gone away

mysqli::thread_safe
mysqli_thread_safe

(PHP 5)
mysqli::thread_safe -- mysqli_thread_safe Devuelve si la seguridad a nivel de
hilos est dada o no
Descripcin
Estilo por procedimientos
bool mysqli_thread_safe ( void )

Indica si la biblioteca cliente est compilada con segurdid a nivel de hilos.


Valores devueltos
TRUE

si la biblioteca cliente es segura a nivel de hilos, FALSE si no.

mysqli::use_result
mysqli_use_result

(PHP 5)
mysqli::use_result -- mysqli_use_result Inicia la recuperacin de un conjunto de
resultados

Descripcin
Estilo orientado a objetos
mysqli_result mysqli::use_result ( void )

Estilo por procedimientos


mysqli_result mysqli_use_result ( mysqli $link )

Usada par iniciar la recuperacin de un conjunto de resultados de la ltima


consulta ejecutada usando la funcin mysqli_real_query() sobre la conexin a la
base de datos.
Se debe llamar a esta funcin o a mysqli_store_result() antes de que los
resultados de una consulta puedan ser recuperados, y una o la otra debe llamarse
para prevenir que falle la siguiente consulta en esa conexin a la base de datos.
Nota:
La funcin mysqli_use_result() no transfiere el conjunto de resultados por completo
desde la base de datos y por lo tanto no se pueden usar funciones
como mysqli_data_seek() para mover una fila en particular dentro del conjunto.
Para usar esta funcionalidad, el conjunto de resultados debe ser almacenado
usando mysqli_store_result(). No se debera usar mysqli_use_result() si se
realizan muchos procesos en el lado del cliente, ya que ocupar el servidor e
impedir que otros hilos actualicen cualquier table desde la cuales se estn
obteniendo los datos.
Valores devueltos
Devuelve un objeto de resultados no almacenado en buffer o FALSE si ocurri un
error.
Ejemplos
Ejemplo #1 Ejemplo de mysqli::use_result()
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contrasea", "world")

;
/* Comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
$consulta

= "SELECT CURRENT_USER();";

$consulta .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";


/* ejecutar una multi consulta */
if ($mysqli->multi_query($consulta)) {
do {
/* primero almacenar el conjunto de resultados */
if ($resultado = $mysqli->use_result()) {
while ($fila = $resultado->fetch_row()) {
printf("%s\n", $fila[0]);
}
$resultado->close();
}
/* imprimir un separador */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
}
/* close connection */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contrasea", "wor

ld");
/* Comprobar la conexin */
if (mysqli_connect_errno()) {
printf("Fall la conexin: %s\n", mysqli_connect_error());
exit();
}
$consulta

= "SELECT CURRENT_USER();";

$consulta .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";


/* ejecutar una multi consulta */
if (mysqli_multi_query($enlace, $consulta)) {
do {
/* primero almacenar el conjunto de resultados */
if ($resultado = mysqli_use_result($enlace)) {
while ($fila = mysqli_fetch_row($resultado)) {
printf("%s\n", $fila[0]);
}
mysqli_free_result($resultado);
}
/* imprimir un separador */
if (mysqli_more_results($enlace)) {
printf("-----------------\n");
}
} while (mysqli_next_result($enlace));
}
/* close connection */
mysqli_close($enlace);
?>

El resultado de los ejemplos seran:


mi_usuario@localhost
-----------------

Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer

mysqli::$warning_count
mysqli_warning_count

(PHP 5)
mysqli::$warning_count -- mysqli_warning_count Devuelve el nmero de
mensajes de advertencia de la ltima consulta para un enlace dado
Descripcin
Estilo orientado a objetos
int $mysqli->warning_count;

Estilo por procedimientos


int mysqli_warning_count ( mysqli $link )

Devuelve el nmero de mensajes de advertencia de la ltima consulta en la


conexin a la base de datos.
Nota:
Para recuperar los mensajes de advertencia que puede utilizar el comando
SQL SHOW WARNINGS [limit row_count].
Parmetros
link

Slo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos
Cantidad de mensajes de advertencia o cero si no hubo mensajes de advertencia
Ejemplos
Ejemplo #1 Ejemplo de $mysqli->warning_count
Estilo orientado a objetos
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$mysqli->query("CREATE TABLE myCity LIKE City");
/* a remarkable city in Wales */
$query = "INSERT INTO myCity (CountryCode, Name) VALUES('GBR',
'Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch')";
$mysqli->query($query);
if ($mysqli->warning_count) {
if ($result = $mysqli->query("SHOW WARNINGS")) {
$row = $result->fetch_row();
printf("%s (%d): %s\n", $row[0], $row[1], $row[2]);
$result->close();
}
}
/* close connection */
$mysqli->close();
?>

Estilo por procedimientos


<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TABLE myCity LIKE City");
/* a remarkable long city name in Wales */
$query = "INSERT INTO myCity (CountryCode, Name) VALUES('GBR',
'Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch')";
mysqli_query($link, $query);
if (mysqli_warning_count($link)) {
if ($result = mysqli_query($link, "SHOW WARNINGS")) {
$row = mysqli_fetch_row($result);
printf("%s (%d): %s\n", $row[0], $row[1], $row[2]);
mysqli_free_result($result);
}
}
/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos seran:


Warning (1264): Data truncated for column 'Name' at row 1