Sei sulla pagina 1di 303

1

Extensión MySQL mejorada


 Introducción
 Información general
 Guía rápida
 Interfaz dual: procedimental y orientada a objetos
 Conexiones
 Ejecutar sentencias
 Sentencias Preparadas
 Procedimientos almacenados
 Sentencias Múltiples
 Soporte de la API para transacciones
 Metadatos
 Instalación/Configuración
 Requerimientos
 Instalación
 Configuración en tiempo de ejecución
 Tipos de recursos
 La extensión mysqli y conexiones persistentes
 Constantes predefinidas
 Notas
 Resumen de las funciones de la extensión MySQLi
 Ejemplos
 Ejemplos básicos de la extensión MySQLi
 mysqli — La clase mysqli
 mysqli::$affected_rows — Obtiene el número de filas afectadas en
la última operación MySQL
 mysqli::autocommit — Activa o desactiva las modificaciones de la
base de datos autoconsignadas
 mysqli::begin_transaction — Inicia una transacción
 mysqli::change_user — Cambia el usuario de la conexión de
bases de datos especificada
 mysqli::character_set_name — Devuelve el juego de caracteres
predeterminado para la conexión a la base de datos
 mysqli::close — Cierra una conexión previamente abierta a una
base de datos
 mysqli::commit — Consigna la transacción actual
 mysqli::$connect_errno — Devuelve el código de error de la
última llamada
 mysqli::$connect_error — Devuelve una cadena con la
descripción del último error de conexión
 mysqli::__construct — Abre una nueva conexión al servidor de
MySQL
 mysqli::debug — Realiza operaciones de depuración
 mysqli::dump_debug_info — Volcado de información de
depuración en el registro
 mysqli::$errno — Devuelve el código del error de la última función
llamada

2
 mysqli::$error_list — Devuelve una lista de errores desde el último
comando ejecutado
 mysqli::$error — Devuelve una cadena que describe el último
error
 mysqli::$field_count — Devuelve el número de columnas para la
consulta más reciente
 mysqli::get_charset — Devuelve un objeto que contiene el
conjunto de caracteres
 mysqli::get_client_info — Obtiene información de la biblioteca
cliente de MySQL
 mysqli_get_client_version — Devuelve la versión clientes de
MySQL como valor de tipo integer
 mysqli::get_connection_stats — Devuelve estadísticas sobre la
conexión del cliente
 mysqli::$host_info — Devuelve una cadena que representa el tipo
de conexión usada
 mysqli::$protocol_version — Devuelve la versión del protocolo
MySQL utilizada
 mysqli::$server_info — Devuelve la versión del servidor MySQL
 mysqli::$server_version — Devuelve la versión del servidor
MySQL como un valor entero
 mysqli::get_warnings — Obtiene el resultado de SHOW
WARNINGS
 mysqli::$info — Obtiene la información de la última consulta
ejecutada
 mysqli::init — Inicializa y devuelve un recurso para utilizarlo con
mysqli_real_connect()
 mysqli::$insert_id — Devuelve el id autogenerado que se utilizó
en la última consulta
 mysqli::kill — Pide al servidor poner fin a un hilo de MySQL
 mysqli::more_results — Comprueba si hay más resultados de una
multi consulta
 mysqli::multi_query — Realiza una consulta a la base de datos
 mysqli::next_result — Prepara el siguiente resultado de
multi_query
 mysqli::options — Establecer opciones
 mysqli::ping — Comprueba la conexión al servidor, o trata de
reconectar si se perdió la conexión
 mysqli::poll — Almacena en caché conexiones
 mysqli::prepare — Prepara una sentencia SQL para su ejecución
 mysqli::query — Realiza una consulta a la base de datos
 mysqli::real_connect — Abre una conexión a un servidor mysql
 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 conexión
 mysqli::real_query — Ejecuta una consulta SQL
 mysqli::reap_async_query — Obtener el resultado de una
consulta asincrónica
 mysqli::refresh — Refresca

3
 mysqli::release_savepoint — Elimina el punto salvado con
nombre del conjunto de puntos salvados de la transacción actual
 mysqli::rollback — Revierte la transacción actual
 mysqli::rpl_query_type — Devuelve un tipo de consulta RPL
 mysqli::savepoint — Define el nombre de un punto de
salvaguarda de la transacción
 mysqli::select_db — Selecciona la base de datos por defecto para
realizar las consultas
 mysqli::send_query — Enviar una consulta y devolver
 mysqli::set_charset — Establece el conjunto de caracteres
predeterminado del cliente
 mysqli::set_local_infile_default — Desestablece el gestor definido
por el usuario para un comando load local infile
 mysqli::set_local_infile_handler — Establecer la llamada de
retorno para el comando LOAD DATA LOCAL INFILE
 mysqli::$sqlstate — Devuelve el error SQLSTATE de la operación
de MySQL previa
 mysqli::ssl_set — Usada para establece conexiones seguras
usando SSL
 mysqli::stat — Obtiene el estado actual del sistema
 mysqli::stmt_init — Inicializa una sentencia y devuelve un objeto
para usarlo con mysqli_stmt_prepare
 mysqli::store_result — Transfiere un conjunto de resultados de la
última consulta
 mysqli::$thread_id — Deveulve el ID del hilo de la conexión actual
 mysqli::thread_safe — Devuelve si la seguridad a nivel de hilos
está dada o no
 mysqli::use_result — Inicia la recuperación de un conjunto de
resultados
 mysqli::$warning_count — Devuelve el número de mensajes de
advertencia de la última consulta para un enlace dado
 mysqli_stmt — La clase mysqli_stmt
 mysqli_stmt::$affected_rows — Devuelve el número total de filas
cambiadas, borradas, o insertadas por la última sentencia
ejecutada
 mysqli_stmt::attr_get — Se utiliza para obtener el valor actual de
un atributo de la sentencia
 mysqli_stmt::attr_set — Se utiliza para modificar el
comportamiento de una sentencia preparada
 mysqli_stmt::bind_param — Agrega variables a una sentencia
preparada como parámetros
 mysqli_stmt::bind_result — Vincula variables a una sentencia
preparada para el almacenamiento de resultados
 mysqli_stmt::close — Cierra una sentencia preparada
 mysqli_stmt::__construct — Construye un nuevo objeto
mysqli_stmt
 mysqli_stmt::data_seek — Busca una fila arbitraria en un conjunto
de resultados de una sentencia
 mysqli_stmt::$errno — Devuelve el código de error de la llamada
de la sentencia más reciente

4
 mysqli_stmt::$error_list — Devuelve una lista de errores de la
última sentencia ejecutada
 mysqli_stmt::$error — Devuelve una descripción en forma de
string del último error de una sentencia
 mysqli_stmt::execute — Ejecuta una consulta preparada
 mysqli_stmt::fetch — Obtiene los resultados de una sentencia
preparadas en las variables vinculadas
 mysqli_stmt::$field_count — Devuelve el número de campos de la
sentencia dada
 mysqli_stmt::free_result — Libera la memoria de los resultados
almacenados del gestor de sentencia dado
 mysqli_stmt::get_result — Obtiene un conjunto de resultados de
una sentencia preparada
 mysqli_stmt::get_warnings — Obtener los resultados de SHOW
WARNINGS
 mysqli_stmt::$insert_id — Obtener el ID generado en la operación
INSERT anterior
 mysqli_stmt::more_results — Comprobar si existen más
resultados de una consulta de consultas múltiples
 mysqli_stmt::next_result — Lee el siguiente resultado de una
consulta múltiple
 mysqli_stmt::$num_rows — Devuelve el número de filas de un
conjunto de resultados de una sentencia
 mysqli_stmt::$param_count — Devuelve el número de parámetros
de la sentencia dada
 mysqli_stmt::prepare — Preparar una sentencia SQL para su
ejecución
 mysqli_stmt::reset — Reinicia una sentencia preparada
 mysqli_stmt::result_metadata — Devuelve los metadatos del
conjunto de resultados de una sentencia preparada
 mysqli_stmt::send_long_data — Enviar datos en bloques
 mysqli_stmt::$sqlstate — Devuelve el error SQLSTATE de la
operación de sentencia previa
 mysqli_stmt::store_result — Transfiere un conjunto de resultados
desde una sentencia preparada
 mysqli_result — La clase mysqli_result
 mysqli_result::$current_field — Obtener posición del campo actual
de un puntero a un resultado
 mysqli_result::data_seek — Ajustar el puntero de resultado a una
fila arbitraria del resultado
 mysqli_result::fetch_all — Obtener todas las filas en un array
asociativo, numérico, o en ambos
 mysqli_result::fetch_array — Obtiene una fila de resultados como
un array asociativo, numérico, o ambos
 mysqli_result::fetch_assoc — Obtener una fila de resultado como
un array asociativo
 mysqli_result::fetch_field_direct — Obtener los metadatos de un
único campo
 mysqli_result::fetch_field — Retorna el próximo campo del
resultset

5
 mysqli_result::fetch_fields — Devuelve un array de objetos que
representan los campos de un conjunto de resultados
 mysqli_result::fetch_object — Devuelve la fila actual de un
conjunto de resultados como un objeto
 mysqli_result::fetch_row — Obtener una fila de resultados como
un array enumerado
 mysqli_result::$field_count — Obtiene el número de campos de
un resultado
 mysqli_result::field_seek — Establecer el puntero del resultado al
índice del campo especificado
 mysqli_result::free — Libera la memoria asociada a un resultado
 mysqli_result::$lengths — Retorna los largos de las columnas de
la fila actual en el resultset
 mysqli_result::$num_rows — Obtiene el número de filas de un
resultado
 mysqli_driver — La clase mysqli_driver
 mysqli_driver::embedded_server_end — Detener el servidor
incrustado
 mysqli_driver::embedded_server_start — Inicializa e inicia el
servidor embebido
 mysqli_driver::$report_mode — Habilita o desabilita las funciones
internas de notificación
 mysqli_warning — La clase mysqli_warning
 mysqli_warning::__construct — El propósito __construct
 mysqli_warning::next — El propósito next
 mysqli_sql_exception — La clase mysqli_sql_exception
 Alias y Funciones de MySQLi obsoletos
 mysqli_bind_param — Alias de mysqli_stmt_bind_param
 mysqli_bind_result — Alias de mysqli_stmt_bind_result
 mysqli_client_encoding — Alias de mysqli_character_set_name
 mysqli_connect — Alias de mysqli::__construct
 mysqli_disable_reads_from_master — Deshabilita las lecturas
desde el maestro
 mysqli_disable_rpl_parse — Deshabilita el interprete RPL
 mysqli_enable_reads_from_master — Activa las lecturas desde el
maestro
 mysqli_enable_rpl_parse — Habilita el interprete RPL
 mysqli_escape_string — Alias de mysqli_real_escape_string
 mysqli_execute — Alias para mysqli_stmt_execute
 mysqli_fetch — Alias de mysqli_stmt_fetch
 mysqli_get_cache_stats — Devuelve las estadísticas de la caché
de Zval del cliente
 mysqli_get_client_stats — Returns client per-process statistics
 mysqli_get_links_stats — Devolver información sobre enlaces
abiertos y almacenados en caché
 mysqli_get_metadata — Alias de mysqli_stmt_result_metadata
 mysqli_master_query — Fuerza la ejecución de una cosulta en un
maestro en una configuración maestro/esclavo
 mysqli_param_count — Alias de mysqli_stmt_param_count
 mysqli_report — Alias de mysqli_driver->report_mode

6
 mysqli_rpl_parse_enabled — Verifica si está habilitado el
interprete RPL
 mysqli_rpl_probe — Exploración RPL
 mysqli_send_long_data — Alias de mysqli_stmt_send_long_data
 mysqli::set_opt — Alias de mysqli_options
 mysqli_slave_query — Fuerza la ejecución de una cosulta en un
esclavo en una configuración maestro/esclavo

7
Introducción
La extensión mysqli (mysql improved) permite acceder a la funcionalidad
proporcionada por MySQL 4.1 y posterior. Se puede encontrar más información
sobre el servidor de base de datos MySQL en » http://www.mysql.com/

Se puede encontrar información general del software disponible para usar


MySQL desde PHP en la Información general

La documentación de MySQL se puede encontrar


en » http://dev.mysql.com/doc/.

Esta documentación incluye partes del manual de MySQL con permiso de


Oracle Corporation.

Los ejemplos emplean las bases de datos » world o » sakila, las cuales están a
libre disposición.

8
Información general ¶
Esta sección proporciona una introducción de las opciones disponibles a la
hora de desarrollar una aplicación PHP que necesite interactuar con una base
de datos MySQL.

¿Qué es una API?

Una Interfaz de Programación de Aplicaciones, o API, define las clases,


métodos, funciones y variables que necesitará llamar una aplicación 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
métodos de los objetos creados. Entre ambas opciones, la segunda es
generalmente la vía recomendada, puesto que está más actualizada y conlleva
una mejor organización de código.

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 solución para cada aplicación.

¿Qué es un Conector?

En la documentación de MySQL, el término conector hace referencia al


software que permite a una aplicación conectarse a un servidor de bases de
datos MySQL. MySQL proporciona conectores para ciertos lenguajes, entre
ellos PHP.

Si una aplicación de PHP necesita comunicarse con un servidor de bases de


datos, necesitará escribir el código 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 aplicación en PHP la API, que manejará la comunicación entre
el servidor de bases de datos y la aplicación, posiblemente empleando en caso
necesario otras bibliotecas. A este software generalmente se le conoce como
conector, dado que permite a una aplicación conectar con un servidor de bases
de datos.

¿Qué es un Driver?

Un driver es un software diseñado para comunicarse con un tipo específico de


servidor de bases de datos. Podría también 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.

9
A modo de ejemplo, la capa de abstracción 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 términos conector y driver indistintamente. Esto


puede dar lugar a confusión. En la documentación de MySQL, el
término driver queda reservado para el software que proporciona la parte
específica de una base de datos dentro de un conector.

¿Qué es una Extensión?

En la documentación de PHP aparece otro término - extensión. El código


fuente de PHP consiste por un lado de un núcleo, y por otro de extensiones
opcionales para el núcleo. Las extensiones de PHP relacionadas con MySQL,
tales como mysqli, y mysql, están implementadas utilizando el framework de
extensiones de PHP.

Típicamente, una extensión ofrece una API al programador de PHP para


permitirle hacer uso de sus utilidades mediante código. Sin embargo, algunas
de las extensiones que utilizan el framework de extensiones de PHP no ofrecen
ninguna API al programador.

La extensión 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 términos API y extensión, dado que una extensión no
debe necesariamente proporcionar una API al programador.

¿Cuáles 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 Extensión MySQL de PHP


o Extensión mysqli de PHP
o Objetos de Datos de PHP (PDO)

Cada una tiene sus ventajas e inconvenientes. El siguiente apartado trata de


dar una breve introducción a los aspectos clave de cada API.

¿Qué es la Extensión MySQL de PHP?

Esta es la extensión original diseñada que permite desarrollar aplicaciones


PHP que interactúan con bases de datos MySQL. La
extensión mysql proporciona una interfaz procedural, y está pensada para usar
sólo con versiones de MySQL anteriores a la 4.1.3. Si bien esta extensión se
puede utilizar con versiones de MySQL 4.1.3 o posteriores, no estarán
disponibles todas las nuevas funcionalidades del servidor MySQL.

10
Nota:
Si se utiliza una versión de MySQL 4.1.3 o posterior, se
recomienda encarecidamente utilizar la extensión mysqli en su lugar.

El código fuente de la extensión mysql se encuentra en el directorio de


extensiones de PHP ext/mysql.

Para más información sobre la extensiónmysql, revise MySQL (Original).

¿Qué es la extensión mysqli de PHP?

La extensión mysqli, o como a veces se le conoce, la extensión de


MySQL mejorada, se desarrolló para aprovechar las nuevas funcionalidades
encontradas en los sistemas MySQL con versión 4.1.3 o posterior. La
extensión mysqli viene incluida en las versiones PHP 5 y posteriores.

La extensión mysqli contiene numerosos beneficios, siendo estas las mejoras


principales respecto a la extensión mysql:

o Interfaz orientada a objetos


o Soporte para Declaraciones Preparadas
o Soporte para Múltiples Declaraciones
o Soporte para Transacciones
o Mejoradas las opciones de depuración
o Soporte para servidor empotrado

Nota:
Si utiliza MySQL versión 4.1.3 o superior, se
recomienda encarecidamente utilizar esta extensión.

Además de la interfaz orientada a objetos, esta extensión también proporciona


una interfaz procedural.

La extensión mysqli está desarrollada mediante el framework de extensiones


de PHP. Su código fuente se ubica en el directorio ext/mysqli.

Para más información sobre la extensión mysqli, revise MySQLi.

¿Qué es PDO?

Los Objetos de Datos de PHP, o PDO, son una capa de abstracción de bases
de datos específicas para aplicaciones PHP. PDO ofrece una API homogénea
para las aplicaciones PHP, independientemente del tipo de servidor de bases
de datos con el que se vaya a conectar la aplicación. En teoría, si se utiliza la
API PDO, se podría cambiar el servidor de bases de datos en uso, por ejemplo
de Firebird a MySQL, y sólo se necesitarían algunos cambios menores en el
código PHP.

Otros ejemplos de capas de abstracción de bases de datos son JDBC para


aplicaciones Java o DBI para Perl.

11
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 versión del servidor MySQL. Por
ejemplo, PDO no permite hacer uso de las Declaraciones Múltiples de MySQL.

PDO está desarrollado utilizando el framework de extensiones de PHP. Su


código fuente se ubica en el directorio ext/pdo.

Para más información 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 específicas 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 comunicación 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 código fuente está ubicado en el directorio ext/pdo_mysql. No
ofrece ninguna API al programador PHP.

Para más información sobre el driver PDO MYSQL, revise MySQL (PDO).

¿Qué es el Driver Nativo de MySQL?

Tanto la extensión 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 era libmysqlclient.

Sin embargo, la interfaz que ofrece libmysqlclient no estaba optimizada para


comunicarse con aplicaciones PHP, dado que libmysqlclient se desarrolló
originalmente teniendo en mente aplicaciónes hechas en C. Por esta razón, se
desarrolló el Driver Nativo de MySQL, mysqlnd, como una alternativa
a libmysqlclient para las aplicaciones en PHP.

Tanto la extensión mysql, como la extensión mysqli y el driver PDO MySQL, se


pueden configurar por separado para utilizar o bien libmysqlclient o
bien mysqlnd. Dado que mysqlnd fue desarrollado específicamente 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:

12
El Controlador Nativo de MySQL sólo 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 código fuente se ubica en ext/mysqlnd. No ofrece
ninguna API al programador de PHP.

Comparación de Funcionalidades

La siguiente tabla compara las funcionalidades de los tres principales métodos


para conectar a MySQL desde PHP:

Comparación de las opciones de la API de MySQL para PHP


PDO (Usando el driver Extensión
Extensión
PDO MySQL y el Driver MySQL de
mysqli de PHP
Nativo MySQL) PHP
Versión de PHP en que se 5.0 5.0 Antes de 3.0
introdujo
Incluído con PHP 5.x Sí Sí Sí
Estado de desarrollo de MySQL Desarrollo Desarrollo activo, desde Sólo se le
activo PHP 5.3 mantiene
Recomendado por MySQL para Sí - opción Sí No
nuevos proyectos recomendada
Soporte para juegos de Sí Sí No
caracteres
Soporte para Declaraciones Sí Sí No
Preparadas en el lado del servidor
Soporte para Declaraciones No Sí No
Preparadas en el lado del cliente
Soporte para Procedimientos Sí Sí No
Almacenados
Soporte para Declaraciones Sí Mayormente No
Múltiples
Soporte para todas las Sí Mayormente No
funcionalidades de MySQL 4.1+

13
Guía rápida ¶
Tabla de contenidos ¶

 Interfaz dual: procedimental y orientada a objetos


 Conexiones
 Ejecutar sentencias
 Sentencias Preparadas
 Procedimientos almacenados
 Sentencias Múltiples
 Soporte de la API para transacciones
 Metadatos

Esta guía rápida le ayudará a elegir y obtener familiaridad con la API MySQL
de PHP.

Esta guía rápida ofrece información general sobre la extensión mysqli. Se


proporcionan ejemplos de código para los aspectos más importantes de la API.
Los conceptos de la base de datos se explican con el grado necesario para
presentar conceptos específicos de MySQL.

Se requiere: Familiaridad con el lenguaje de programación PHP, con el


lenguaje SQL, y conociemientos básicos del servidor MySQL.

14
Interfaz dual: procedimental y orientada a objetos ¶

La extensión mysqli ofrece una interfaz dual. Soporta el paradigma de


programación procedimental y el orientado a objetos.

Los usuarios que migren desde la extensión mysql antigua pueden preferir la
interfaz procedimental. Esta interfaz es similar a la de la extensión antigua de
mysql. En la mayoría de los casos, los nombres de funciones difieren
únicamente por el prefijo. Algunas funciones de mysqli toman como primer
argumento un gestor de conexión, mientras que las funciones similares de la
antigua interfaz de mysql lo toman como el último argumento opcional.

Ejemplo #1 Migración sencilla desde la antigua extensión mysql

<?php
$mysqli = mysqli_connect("ejemplo.com", "usuario", "contraseña", "base
datos");
$resultado = mysqli_query($mysqli, "SELECT 'Por favor, no use ' AS _ms
g FROM DUAL");
$fila = mysqli_fetch_assoc($resultado);
echo $fila['_msg'];

$mysql = mysql_connect("ejemplo.com", "usuario", "contraseña");


mysql_select_db("test");
$resultado = mysql_query("SELECT 'la extensión mysql para nuevos desar
rollos.' AS _msg FROM DUAL", $mysql);
$fila = mysql_fetch_assoc($resultado);
echo $fila['_msg'];
?>

El resultado del ejemplo sería:

Por favor, no use la extensión mysql para nuevos desarrollos.

La interfaz orientada a objetos

Además de la clásica interfaz procedimental, los usuarios pueden optar por


usar la interfaz orientada a objetos. La documentación está organizada según
la interfaz orientada a objetos. Esta interfaz muestra las funciones agrupadas
por su propósito, haciendo más fácil los comienzos. La sección de referencia
proporciona ejemplos para ambas variantes de sintaxis.

No existen diferencias significativas de rendimiento entre las dos interfaces.


Los usuarios puede basar su elección en sus preferencias personales.

Ejemplo #2 Interfaz orientada a objetos y procedimental

<?php
$mysqli = mysqli_connect("ejemplo.com", "usuario", "contraseña", "base
datos");
if (mysqli_connect_errno($mysqli)) {
echo "Fallo al conectar a MySQL: " . mysqli_connect_error();
}

15
$resultado = mysqli_query($mysqli, "SELECT 'Un mundo lleno de ' AS _ms
g FROM DUAL");
$fila = mysqli_fetch_assoc($resultado);
echo $fila['_msg'];

$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato


s");
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 sería:

Un mundo lleno de elecciones para complacer a todos.

Se usa la interfaz orientada a objetos en el inicio rápido porque la sección 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 código.

Ejemplo #3 Estilo de codificación malo

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Fallo al conectar 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 . ") " . $mysqli->error;
}

if ($fila = $resultado->fetch_assoc()) {
echo $fila['_msg'];
}
?>

El resultado del ejemplo sería:

Estilo malo pero posible.

16
Véase también

 mysqli::__construct()
 mysqli::query()
 mysqli_result::fetch_assoc()
 $mysqli::connect_errno
 $mysqli::connect_error
 $mysqli::errno
 $mysqli::error
 El resumen de funciones de la extensión MySQLi

17
Conexiones ¶
El servidor MySQL soporta el uso de diferentes capas de transporte para
conexiones. Las conexiones usan TCP/IP, sockets de dominio Unix o tuberías
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 conexión TCP/IP usando
como nombre de host localhost, se debe usar 127.0.0.1 en su lugar.

Ejemplo #1 Significado especial de localhost

<?php
$mysqli = new mysqli("localhost", "usuario", "contraseña", "basedatos"
);
if ($mysqli->connect_errno) {
echo "Fallo al conectar a MySQL: (" . $mysqli-
>connect_errno . ") " . $mysqli->connect_error;
}
echo $mysqli->host_info . "\n";

$mysqli = new mysqli("127.0.0.1", "usuario", "contraseña", "basedatos"


, 3306);
if ($mysqli->connect_errno) {
echo "Fallo al conectar a MySQL: (" . $mysqli-
>connect_errno . ") " . $mysqli->connect_error;
}

echo $mysqli->host_info . "\n";


?>

El resultado del ejemplo sería:

Localhost via UNIX socket


127.0.0.1 via TCP/IP

Valores predeterminados de los parámetros de conexión

Dependiendo de la función de conexión usada se pueden omitir varios


parámetros. Si no se proporciona un parámetro, la extensión intentará usar los
valores predeterminados que están establecidos en el fichero de configuración
de PHP.

Ejemplo #2 Configuración 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 parámetros son pasados a la biblioteca cliente


que esté usando esta extensión. Si la biblioteca cliente detecta parámetros

18
vacíos o no establecidos, puede usar los valores internos predeterminados de
la biblioteca.

Valores predeterminados internos de conexión de la biblioteca

Si el valor del host no está establecido o está vacío, la biblioteca cliente usará
una conexión de socket Unix sobre localhost. Si el socket no está establecido o
está vacío, y es solicitada una conexión de socket Unix, se intentará una
conexiónal 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 conexión basada en una tubería con
nombre de Windows. En este caso el parámetro del socket se interpreta como
el nombre de la tubería. Si no se proporciona o está vacío, se usará como
socket (nombre de la tubería) \\.\pipe\MySQL.

Si no está establecida una conexión basada en un socket de dominio Unix ni en


una tubería con nombre de Windows y el valor del parámetro 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 lógica para determinados valores predeterminados.

Opciones de conexión

Las opciones de conexión están disponibles para, por ejemplo, establecer


comando iniciales que son ejecutados sobre la conexión, o para solicitar el uso
de ciertos conjuntos de caracteres. Las opciones de conexión deben ser
establecidas antes de que se establezcla una conexión de red.

Para configurar una opción de conexión, la operación de conexión ha de ser


realizada en tres pasos: crear un gestor de conexión con mysqli_init(),
establecer las opciones solicitadas usando mysqli_options(), y establecer la
conexión de red con mysqli_real_connect().

Caché de conexiones

La extensión mysqli soporta conexiones persistentes a bases de datos, las


cuales son un tipo especial de conexiones almacenadas en caché. Por defecto,
cada conexión a una base de datos abierta por un script es cerrada
explícitamente por el usuario durante el tiempo de ejecución o liberada
automáticamente al finalizar el script. Una conexión persistente no. En su lugar,
se coloca en una caché para su reutilización posterior, si una conexión es
abierta al mismo servidor usando el mismo nombre de usuario, contraseña,
socket, puerto y base de datos predeterminada. La reutilización ahorra gastos
de conexioń.

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


Dependiendo de modelo de distribución del servidor web, un proceso PHP

19
puede servir una o múltiples peticiones. Por lo tanto, una conexión almacenada
en caché puede ser utilizada posteriormente por uno o más scripts.

Conexiones persistentes

Si una conexión persistente no usada con una combiación dada de host,


nombre de usuario, contraseña, socket, puerto y base de datos predeterminada
no se puede encontrar en la caché de conexiones, mysqli abrirá una nueva
conexión. El uso de conexiones persistentes se puede habilitar y deshabilitar
usando la directiva de PHP mysqli.allow_persistent. El número total de
conexiones abiertas por un script puede ser limitado con mysqli.max_links. El
número máximo de conexiones persistentes por proceso de PHP puede
restringirse con mysqli.max_persistent. Observe que el servidor web puede
engendrar muchos procesos de PHP.

Una queja común 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 automéáticamente reanudadas. También, los cambios de
autorización que ocurran durante la colocación de la conexión en la caché y su
reutilización no están 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 extensión mysqli soporta ambas interpretaciones de una conexión


persistente: el estado persiste, y el estado se reinicia antes de la reutilización.
Lo predeterminado es la reiniciación. Antes de que una conexión sea
reutilizada, la extensión llama implicitamente a mysqli_change_user() para
reiniciar el estado. La conexión persistente aparece al usuario como si
estuviera recién abierta. No son visibles ningún artefacto de los usos previos.

La función mysqli_change_user() es una operación cara. Para un mejor


rendimiento, los usuarios pueden recompilar la extensión con la bandera de
compilación MYSQLI_NO_CHANGE_USER_ON_PCONNECT establecida.

Corresponde al usuario elegir entre comportamiento seguro o mejor


rendimiento. Ambas son metas de optimización válidas. Para facilitar el uso, el
comportamiento seguro es el predeterminado a expensas de un rendimiento
máximo.

See also

 mysqli::__construct()
 mysqli::init()
 mysqli::options()
 mysqli::real_connect()
 mysqli::change_user()
 $mysqli::host_info
 Opciones de configuración de MySQLi
 Conexiones persistentes a bases de datos

20
Ejecutar sentencias ¶

Las sentencias se pueden ejecutar con las


funciones mysqli_query(), mysqli_real_query() y mysqli_multi_query(). La
función mysqli_query() es la más común, y combina la sentencia de
ejecucución con su conjunto de resultados obtenido de un buffer, si lo hubiera,
en una llamada. Llamar a mysqli_query() es idéntico que llamar
a mysqli_real_query() seguido de mysqli_store_result().

Ejemplo #1 Conectando a MySQL

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->error;
}
?>

Conjuntos de resultados almacenados en buffer

Después de la ejecución 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 ejecución de sentencias y el almacenamiento en buffer de conjuntos de
resultados.

Las aplicaciones de PHP pueden navegar libremente a través de resultados


almacenados en buffer. La navegación es más rápida debido a que los
conjuntos de resultados se mantienen en la memoria del cliente. Tenga en
cuenta que a menudo es más fácil procesar datos en el cliente que hacerlo el
servidor.

Ejemplo #2 Navegación a través de resultados almacenados en buffer

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión a MySQL: (" . $mysqli-

21
>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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->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 sería:

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 liberación


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 leídas.

Ejemplo #3 Navegación a través 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";

22
}
?>

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 ejecución de sentencias. Con el protocolo texto, el servidor MySQL
convierte todos los datos de los conjuntos de resultados en cadenas antes de
enviarlos. Esta conversión 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 conversión 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", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->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['etiqu
eta']));
?>

El resultado del ejemplo sería:

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

Es posible convertir valores de columnas de tipo integer y float a números de


PHP estableciendo la opción de conexión MYSQLI_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

23
resultados y convertirá las columnas númerocas de SQL a números 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 opción de conexión

<?php
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
$mysqli-
>real_connect("ejemplo.com", "user", "contraseña", "basedatos");

if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->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['etiqu
eta']));
?>

El resultado del ejemplo sería:

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

Véase también

 mysqli::__construct()
 mysqli::init()
 mysqli::options()
 mysqli::real_connect()
 mysqli::query()
 mysqli::multi_query()
 mysqli::use_result()
 mysqli::store_result()
 mysqli_result::free()

24
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 básico

La ejecución de sentencias preparadas consiste en dos etapas: la preparación


y la ejecución. En la etapa de preparación se envía una plantilla de sentencia al
servidor de bases de datos. El servidor realiza una comprobación de sintaxis e
inicializa los recursos internos del servidor para su uso posterior.

El servidor de MySQL soporta el uso de parámetros de sustitución posicionales


anónimos con ?.

Ejemplo #1 Primera etapa: prepación

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->error;
}

/* Sentencia preparada, etapa 1: preparación */


if (!($sentencia = $mysqli-
>prepare("INSERT INTO test(id) VALUES (?)"))) {
echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli-
>error;
}
?>

La preparación es seguida de la ejecución. Durante la ejecución el cliente


vincula los valores de los parámetros y los envía 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 vinculación de parámetros: (" . $sentencia-

25
>errno . ") " . $sentencia->error;
}

if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia-
>errno . ") " . $sentencia->error;
}
?>

Ejecución repetida

Una sentencia preparada se puede ejecutar repetidamente. En cada ejecución


el valor actual de la variable vinculada se evalúa y se envía 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 múltiples veces

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->error;
}

/* Sentencia preparada, etapa 1: preparación */


if (!($sentencia = $mysqli-
>prepare("INSERT INTO test(id) VALUES (?)"))) {
echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli-
>error;
}

/* Sentencia preparada, etapa 2: vinculación y ejecución */


$id = 1;
if (!$sentencia->bind_param("i", $id)) {
echo "Falló la vinculación de parámetros: (" . $sentencia-
>errno . ") " . $sentencia->error;
}

if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia-
>errno . ") " . $sentencia->error;
}

/* Sentencia preparada: ejecución repetida, sólo datos transferidos de


sde el cliente al servidor */
for ($id = 2; $id < 5; $id++) {

26
if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia-
>errno . ") " . $sentencia->error;
}
}

/* se recomienda el cierre explícito */


$sentencia->close();

/* Sentencia no preparada */
$resultado = $mysqli->query("SELECT id FROM test");
var_dump($resultado->fetch_all());
?>

El resultado del ejemplo sería:

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


deberían cerrarse explícitamente inmediatamente después de su uso. Si no se
realiza explícitamente, la sentencia será cerrada cuando el gestor de la
sentencia sea liberado por PHP.

Usar una sentencia preparada no es siempre la manera más eficiente de


ejecutar una sentencia. Una sentencia preparada ejecutada una sola vez causa
más viajes de ida y vuelta desde el cliente al servidor que una sentencia no
preparada. Es por esta razón por lo que SELECT no se ejecuta arriba como
una sentencia preparada.

También 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


27
<?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 envía los
datos del conjunto de resultados "tal cual" en formato binario. Los resultados no
son serializados en cadenas antes del envío. Las bibliotecas cliente no reciben
cadenas solamente. En su lugar, recibirán datos binarios e intentarán convertir
los valores a los tipos de datos de PHP apropiados. Por ejemplo, los resultados
de una columna de SQL INT serán proporcionados como variables de tipo
integer de PHP.

Ejemplo #5 Tipos de datos nativos

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->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['etiqu
eta']));
?>

El resultado del ejemplo sería:

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

28
Este comportamiento difiere de las sentencias no preparadas. Por defecto, las
sentencias no preparadas devolverán todos los resultados como cadenas. Este
comportamiento predeterminado se puede cambiar usand una opción de
conexión. Si se utiliza la opción de conexión no existirán diferencias.

Obtener resultados usando variables vinculadas

Los resultados de las sentencias preparadas pueden ser recuperados mediante


varibles de salida vinculadas, o por la petición de un objeto mysqli_result.

Las variables de salida deben ser vinculadas después de la ejecución de la


sentencia. Una variable debe estar vinculada para cada columna del conjunto
de resultados de las sentencias.

Ejemplo #6 Vinculación de variables de salida

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->error;
}

if (!($sentencia = $mysqli-
>prepare("SELECT id, etiqueta FROM test"))) {
echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli-
>error;
}

if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $mysqli->errno . ") " . $mysqli-
>error;
}

$id_salida = NULL;
$etiqueta_salida = NULL;
if (!$sentencia->bind_result($id_salida, $etiqueta_salida)) {
echo "Falló la vinculación de los parámetros de salida: (" . $sent
encia->errno . ") " . $sentencia->error;
}

while ($sentencia->fetch()) {
printf("id = %s (%s), etiqueta = %s (%s)\n", $id_salida, gettype($
id_salida), $etiqueta_salida, gettype($etiqueta_salida));
}
?>

29
El resultado del ejemplo sería:

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 implícitamente 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
implícitamente por mysqli.

También 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 también se pueden


recuperar a través 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", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->error;
}

if (!($sentencia = $mysqli-
>prepare("SELECT id, etiqueta FROM test ORDER BY id ASC"))) {
echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli-
>error;
}

if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia-
>errno . ") " . $sentencia->error;
}

if (!($resultado = $sentencia->get_result())) {

30
echo "Falló la obtención del conjunto de resultados: (" . $sentenc
ia->errno . ") " . $sentencia->error;
}

var_dump($resultado->fetch_all());
?>

El resultado del ejemplo sería:

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

Usar la interfaz mysqli_result ofrece el beneficio adicional de la navegación


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", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->error;
}

if (!($sentencia = $mysqli-
>prepare("SELECT id, etiqueta FROM test"))) {
echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli-
>error;
}

if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia-
>errno . ") " . $sentencia->error;
}

if (!($resultado = $sentencia->get_result())) {
echo "Falló la obtención del conjunto de resultados: (" . $sentenc
ia->errno . ") " . $sentencia->error;

31
}

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 sería:

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 inyección 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 ejecución, después de haber analizado la
plantilla de la sentencia. Los parámetros 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 conversión apropiada. Véase la
función mysqli_stmt_bind_param() para más información.

A veces, tal separación es considerada como la única característica de


seguridad para evitar inyecciones SQL, pero se puede alcanzar el mismo grado
de seguridad con sentencias no preparadas, si todos los valores están
formateados correctamente. Debería observarse que el formateo correcto no es
lo mismo que usar escapes, y que involucra más lógica que simplemente usar
escapes. Por lo tanto, las sentencias preparadas son sencillamente una
estrategia más conveniente y menos propensa a errores para este elemetno de
seguridad de bases de datos.

Emulación de sentencias preparadas en el lado del cliente

32
La API no inclye la emulación para sentencias preparadas en el lado del
cliente.

Comparación entre sentencias preparadas y no preparadas

La tabla de abajo compara las sentencias preparadas y no preparadas del lado


del servidor.

Comparación entre sentencias preparadas y no preparadas

Sentencia preparada Sentencia no preparada

Viajes de ida y vuelta desde 2 1


el cliente al servidor,
SELECT, ejecución única

Cadenas de sentencias 1 1
tranferidas desde el cliente
al servidor

Viajes de ida y vuelta desde 1 + n n


el cliente al servidor,
SELECT, ejecución repetida
(n)

Cadenas de sentencias 1 plantilla, n veces n veces junto con el parámetro, si


tranferidas desde el cliente parametro vinculado, existe
al servidor si existe

API de vinculación de Sí, escape de No, escape de entradas manual


parámetros de entrada entradas automático

API de vinculación de Sí No
variables de salida

Soporte para el uso de la Sí, Sí


API mysqli_result use mysqli_stmt_get_r
esult()

Conjuntos de resultados Sí, Sí, lo predeterminado


almacenados en buffer use mysqli_stmt_get_r de mysqli_query()
esult() o la vinculación
con mysqli_stmt_store
_result()

Conjuntos de resultados no Sí, use la API de Sí,


almacenados en buffer vinculación de salida use mysqli_real_query() con mysqli_u
se_result()

"Sabor" de la transferencia Protocolo binario Protocolo de texto


de datos del protocolo
Cliente Servidor de MySQL

33
Comparación entre sentencias preparadas y no preparadas

Sentencia preparada Sentencia no preparada

Tipos de datos SQL de los Preservados al Convertidos a cadena o preservados


valores del conjunto de obtenerlos al obetenerlos
resultados

Soporta todas las sentencia Versiones reciente de Sí


SQL MySQL soportan
muchas pero no todas

Véase también

 mysqli::__construct()
 mysqli::query()
 mysqli::prepare()
 mysqli_stmt::prepare()
 mysqli_stmt::execute()
 mysqli_stmt::bind_param()
 mysqli_stmt::bind_result()

34
Procedimientos almacenados ¶

Las bases de datos de MySQL soportan procedimientos almacenados. Un


procedimiento almacenado es una subrutina almacenada en el catálogo 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.

Parámetros

Los procedimientos almacenados pueden tener parámetros IN, INOUT y OUT,


dependiendo de la versión de MySQL. La interfaz mysqli no tiene una noción
especial de los diferentes tipos de parámetros.

Parámetro IN

Los parámetros de entrada son proporcionados con la sentencia CALL.


Asegúrese de que los valores están escapados correctamente.

Ejemplo #1 Llamar a un procedimiento almacenado

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->error;
}

if (!$mysqli->query("DROP PROCEDURE IF EXISTS p") ||


!$mysqli-
>query("CREATE PROCEDURE p(IN id_val INT) BEGIN INSERT INTO test(id) V
ALUES(id_val); END;")) {
echo "Falló la creación 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());
?>

35
El resultado del ejemplo sería:

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

Parámetro INOUT/OUT

A los valores de los parámetros INOUT/OUT se acceden usando variables de


sesión.

Ejemplo #2 Usar variables de sesión

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación 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 obtención: (" . $mysqli->errno . ") " . $mysqli-
>error;
}

$fila = $resultado->fetch_assoc();
echo $fila['_p_out'];
?>

El resultado del ejemplo sería:

¡Hola!

Los desarrolladores de aplicaciones y framework pueden proporcionar una API


más conveniente usando una mezcla de variables de sesiones e inspección del
catálogo de la base de datos. Sin embargo, observe el posible impacto de
rendimiento de una solución personalizada basada en la inspección del
catálogo.

36
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
función mysqli_query() combina la ejecución de la sentencia y la obtención 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() o mysqli_multi_query(). Ambas
funciones permiten la obtención de cualquier número de conjuntos de
resultados devueltos por una sentencia, como CALL. El fallo de la obtención 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", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->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 creación 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 {

37
if ($mysqli->errno) {
echo "Store failed: (" . $mysqli->errno . ") " . $mysqli-
>error;
}
}
} while ($mysqli->more_results() && $mysqli->next_result());
?>

El resultado del ejemplo sería:

---
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 preparación de la sentencia SQL CALL.

Ejemplo #4 Procedimientos Almacenados y Sentencias Preparadas

38
<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->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 creación del procedimiento almacenado: (" . $mysqli
->errno . ") " . $mysqli->error;
}

if (!($sentencia = $mysqli->prepare("CALL p()"))) {


echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli-
>error;
}

if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $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 . ") " . $sentencia->error;
}
}
} while ($sentencia->more_results() && $sentencia->next_result());
?>

Por supuesto, tamibién está soportado el uso de la API de vinculación para la


obtención.

Ejemplo #5 Procedimientos Almacenados y Sentencias Preparadas usando la


API de vinculación

<?php
if (!($sentencia = $mysqli->prepare("CALL p()"))) {
echo "Falló la preparación: (" . $mysqli->errno . ") " . $mysqli-

39
>error;
}

if (!$sentencia->execute()) {
echo "Falló la ejecución: (" . $sentencia-
>errno . ") " . $sentencia->error;
}

do {

$id_out = NULL;
if (!$sentencia->bind_result($id_out)) {
echo "Falló la vinculiación: (" . $sentencia-
>errno . ") " . $sentencia->error;
}

while ($sentencia->fetch()) {
echo "id = $id_out\n";
}
} while ($sentencia->more_results() && $sentencia->next_result());
?>

Véase también

 mysqli::query()
 mysqli::multi_query()
 mysqli_result::next-result()
 mysqli_result::more-results()

40
Sentencias Múltiples ¶

MySQL permite opcionalmente tener múltiples sentencias en una cadena de


sentencias. El envío de múltiples sentencias de una sola vez reduce los viajes
de ida y vuelta desde el cliente al servidor, pero requiere un manejo especial.

Las sentencias múltiples o multiconsultas deben ser ejecutadas


con mysqli_multi_query(). Las sentencias individuales de la cadena de
sentencias están 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 múltiple.

Ejemplo #1 Sentencias múltiples

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 creación de la tabla: (" . $mysqli-
>errno . ") " . $mysqli->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 sería:

array(1) {
[0]=>
array(1) {

41
["_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 conexión necesaria para activar las multiconsultas en el
servidor. Se usa una llamada extra a la API para las sentencias múltiples para
reducir la verosimilitud de los ataques de inyecciones SQL accidentales. Un
atacante puede intentar añadir sentencias como ; DROP DATABASE mysql o ;
SELECT SLEEP(999). Si el atacante tiene éxito al añadir 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 Inyección SQL

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "based
atos");
$resultado = $mysqli->query("SELECT 1; DROP TABLE mysql.user");
if (!$resultado) {
echo "Error al ejecutar la consulta: (" . $mysqli-
>errno . ") " . $mysqli->error;
}
?>

El resultado del ejemplo sería:

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 múltiples con sentencias preparadas no está soportado.

See also

 mysqli::query()
 mysqli::multi_query()
 mysqli_result::next-result()
 mysqli_result::more-results()

42
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
autoconsignación (auto commit) y para consignar y reiniciar transacciones.

Ejemplo #1 Establecer el modo de autoconsignación con SQL y a través de la


API

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión a MySQL: (" . $mysqli-
>connect_errno . ") " . $mysqli->connect_error;
}

/* Recomendado: usar la API para cotrolar las configuraciones transacc


ionales */
$mysqli->autocommit(false);

/* No serán monitorizadas y reconocidas por la aplicación y el complem


ento de balance de carga */
if (!$mysqli->query('SET AUTOCOMMIT = 0')) {
echo "Falló la consulta: (" . $mysqli->errno . ") " . $mysqli-
>error;
}
?>

Los paquetes de características opcionales, como los comlementos de


replicación y el de balance de carga, pueden fácilmente monitorizar llamadas a
la API. El complemento de replicación transacciones conscientes del balance
de carga, si las transacciones están controladas con llamadas a la API. Las
transacciones conscientes del balance de carga no están disponibles si las
sentencias SQL se usan para establecer el modo de autoconsignación,
consignación y reinicio de una transacción.

Ejemplo #2 Consignación y reinicio

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
$mysqli->autocommit(false);

$mysqli->query("INSERT INTO test(id) VALUES (1)");


$mysqli->rollback();

$mysqli->query("INSERT INTO test(id) VALUES (2)");

43
$mysqli->commit();
?>

Observe que el servidor MySQL no puede reiniciar todas las sentencias.


Algunoas sentencias causan una consignación implícia.

Véase también

 mysqli::autocommit()
 mysqli_result::commit()
 mysqli_result::rollback()

44
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 travbés de la interfaz
de mysqli. La extensión realiza cambios insignificantes o no realiza ninguno a la
información que recibe. La diferencias entre versiones del servidor MySQL no
están alineadas.

A los metadatos se puede acceder a través de la interfaz mysqli_result.

Ejemplo #1 Acceder a los metadatos de un conjunto de resultados

<?php
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedato
s");
if ($mysqli->connect_errno) {
echo "Falló la conexión 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 sería:

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)

45
}
[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
de mysqli_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 DUAL");
$sentencia->execute();
$resultado = $sentencia->result_metadata();
var_dump($resultado->fetch_fields());
?>

Véase también

 mysqli::query()
 mysqli_result::fetch_fields()

46
Instalación/Configuración
Tabla de contenidos ¶

 Requerimientos
 Instalación
 Configuración en tiempo de ejecución
 Tipos de recursos

Requerimientos ¶
Para contar con éstas funciones, debe compilar PHP con soporte de la
extensión mysqli.

Nota:
La extensión mysqli está diseñado para funcionar con la versión de MySQL
4.1.13 o posterior, o 5.0.7 o posterior. Para versiones previas, por favor
consulte la documentación de la extensión MySQL.

Instalación ¶

La extensión mysqli se introdujo en la versión 5.0.0 de PHP. El Controlador


Nativo de MySQL se introdujo en la versión 5.3.0 de PHP.

Instalación en Linux ¶

Las distribuciones comunes de Unix incluyen versiones binarias de PHP que se


pueden instalar. Aunque estas versiones binarias son típicamente construidas
con soporte para las extensiones de MySQL, podría ser necesario instarlar las
bibliotecas de extensiones en sí utilizando un paquete adicional. Compruebe el
gestor de paquetes que viene con la distribución elegida para su disponibilidad.

Por ejemplo, en Ubuntu el paquete php5-mysql instala las extensiones de PHP


ext/mysql, ext/mysqli, y pdo_mysql. En CentOS, el paquete php-mysql también
instala estas tres extensiones de PHP.

De forma alternativa, esta extensión la puede compilar uno mismo. Construir


PHP desde la fuente permite especificar las extensiones de MySQL que se
quieren usar, así como elegir la biblioteca cliente para cada extensión.

La opción de la biblioteca cliente recomendada es el Controlador Nativio de


MySQL, ya que sus resultados mejoran el rendimiento y dan acceso a
características no disponibles cuando se utiliza la Biblioteca Cliente de MySQL.
Consúlte ¿Qué es el Controlador Nativo de MySQL para PHP?, que contiene
un breve resumen de las ventajas del Controlador Nativo de MySQL.

47
ruta/a/mysql_config representa la ubicación del programa mysql_config que
viene con el Servidor de MySQL.

Matriz de soporte en tiempo de compilación de mysqli

Opciones de Opciones de
PHP Versión Por defecto Historial d
configuración: mysqlnd configuración: libmysqlclient

5.4.x mysqlnd --with-mysqli --with-mysqli=ruta/a/mysql_config mysqlnd a


predeterm

5.3.x libmysqlclient --with-mysqli=mysqlnd --with-mysqli=ruta/a/mysql_config mysqlnd t

5.0.x, 5.1.x, libmysqlclient No Disponible --with-mysqli=ruta/a/mysql_config mysqlnd n


5.2.x

Observe que es posible mezclar libremente extensiones de MySQL y


bibliotecas cliente. Por ejemplo, es posible habilitar la extensión de MySQL
para que emplee la Biblioteca Cliente de MySQL (libmysqlclient), mientras se
configura la extensión mysqli para que utilice el Controlador Nativo de MySQL.
No obstante, son posibles todas las permutaciones de extensiones y bibliotecas
cliente.

Instalación en sistemas Windows ¶

En Windows es más común instalar PHP con el instalador binario.

PHP 5.3.0 y posterior ¶

En Windows, con las versiones 5.3 o superiores de PHP, la


extensión mysqli viene habilitada y utiliza por omisión el Controlador Nativo de
MySQL, lo que significa que no es necesario configurar el acceso
a libmysql.dll.

PHP 5.0, 5.1, 5.2 ¶

En estas versiones antiguas de PHP sin soporte (PHP 5.2 alcanzó su final de
vida útil el 6 de enero de 2011), son necesarios procedimientos adicionales de
configuración para habilitar mysqli y especificar la biblioteca cliente que se va a
utilizar.

La extensión mysqli no está habilitada por defecto, por lo que la


DLL php_mysqli.dll debe habilitarse en php.ini. Para esto, es necesario
encontrar el fichero php.ini (normalmente se encuentra en c:\php), y
asegurarse de eliminar el comentario (punto y coma) al inicio de la
línea extension=php_mysqli.dll, en la sección marcada como [PHP_MYSQLI].

Además, para utilizar la biblioteca cliente de MySQL con mysqli, debe


asegurarse de que PHP puede acceder al fichero de la biblioteca cliente. La
biblioteca cliente MySQL se incluye como un fichero de

48
nombre libmysql.dll en la distribución de PHP en Windows. Este fichero debe
estar disponible en la variable de entorno de sistema de Windows PATH, de
modo que puede ser cargado con éxito. Véase la FAQ titulada "Cómo agrego
mi directorio PHP a la variable PATH en Windows" para obtener información
sobre cómo hacer esto. Copiar libmysql.dll al directorio de sistema de
Windows (normalmente C:\Windows\System) funciona, pues el directorio de
sistema esta por defecto en el PATH del sistema. Sin embargo, esta práctica
está totalmente desaconsejada.

Al igual que con cualquier otra extensión de PHP (como php_mysqli.dll), la


directiva de PHP extension_dir se debe establecer en el directorio donde están
ubicadas las extensiones de PHP. Consulte tambien el Manual de instalación
de Windows. Un ejemplo de valor de extension_dir para PHP 5 es c:\php\ext.

Nota:
Si al iniciar el servidor web un error similar al siguiente ocurre: "Unable to load
dynamic library './php_mysqli.dll'", esto es
porque php_mysqli.dll y/o libmysql.dll no pudo ser encontrado por el sistema.

Configuración en tiempo de ejecución ¶

El comportamiento de estas funciones se ve afectado por la configuración


de php.ini.

Opciones de configuración de MySQLi

Nombre Por defecto Cambiable Historial de cam

mysqli.allow_local_infile "1" PHP_INI_SYSTEM Disponible desde

mysqli.allow_persistent "1" PHP_INI_SYSTEM Disponible desde

mysqli.max_persistent "-1" PHP_INI_SYSTEM Disponible desde

mysqli.max_links "-1" PHP_INI_SYSTEM Disponible desde

mysqli.default_port "3306" PHP_INI_ALL Disponible desde

mysqli.default_socket NULL PHP_INI_ALL Disponible desde

mysqli.default_host NULL PHP_INI_ALL Disponible desde

mysqli.default_user NULL PHP_INI_ALL Disponible desde

mysqli.default_pw NULL PHP_INI_ALL Disponible desde

mysqli.reconnect "0" PHP_INI_SYSTEM Disponible desde

mysqli.rollback_on_cached_plink TRUE PHP_INI_SYSTEM Disponible desde

Para más detalles y definiciones de las constantes de PHP_INI_* , véase el


capítulo sobre los cambios de configuración.

49
He aquí una breve explicación de las directivas de configuración.

mysqli.allow_local_infile integer

Permite el acceso, desde la perspectiva de PHP, de los archivos locales


con sentencias LOAD DATA

mysqli.allow_persistent integer

Habilitar la capacidad de crear conexiones persistentes


usando mysqli_connect().

mysqli.max_persistent integer

Máximo de conexiones persistentes que se pueden hacer. Se establece


en 0 para ilimitado.

mysqli.max_links integer

Número máximo de conexiones con MySQL por proceso.

mysqli.default_port integer

El número de puerto TCP predeterminado a utilizar cuando se conecta a


el servidor de base de datos si no se especifica ningún otro puerto. Si no
se especifica el valor predeterminado, el puerto se obtendrá
de MYSQL_TCP_PORT variable de entorno, la entrada mysql-
tcp en /etc/services o en la constante en tiempo de
compilación MYSQL_PORT constante, en ese orden. Win32 sólo
utilizará la constante MYSQL_PORT.

mysqli.default_socket string

El nombre de socket predeterminado a usar cuando se conecta a un


servidor de bases de datos local si no se especifica ningún otro nombre
de socket.

mysqli.default_host string

Servidor host predeterminado a usar cuando se conecta al servidor de


base de datos si no se indica otro. No se aplica en safe mode.

mysqli.default_user string

El nombre de usuario predeterminado a usar cuando se conecta a la


base de datos servidor si no se indica otra. No se aplica en safe mode.

mysqli.default_pw string

50
La contraseña predeterminada a usar cuando se conecta a la base de
datos servidor si no se indica otra. No se aplica en safe mode.

mysqli.reconnect integer

Vuelve a conectar automáticamente si se pierde la conexión.

Nota: Este ajuste php.ini es ignorado por el controlador de mysqlnd.


mysqli.rollback_on_cached_plink bool

Empleado para revertir conexiones puesta de nuevo la provisión de


conexiones persistentes.

El usuario no puede modificar MYSQL_OPT_READ_TIMEOUT mediante una


llamada a la API o con ajustes de configuración en tiempo de ejecución. Tenga
en cuenta que si fuera posible habría diferencias entre cómo
interpretarían libmysqlclient y los flujos el valor
de MYSQL_OPT_READ_TIMEOUT.

Tipos de recursos ¶

Esta extensión no tiene ningún tipo de recurso definido.

51
La extensión mysqli y conexiones
persistentes ¶
EL soporte para conexiones persistentes fue introducido en PHP 5.3 para el
extensión mysqli. El soporte ya estaba presente en PDO MYSQL y ext/mysql.
La idea detrás de las conexiones persistentes es que una conexión 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 creación de conexiones nuevas cada vez que es requerido,
como las conexiones no utilizadas se almacenan en caché y están lista para
ser reutilizadas.

A diferencia de la extensión mysql, mysqli no proporciona una función separada


para la apertura de conexiones persistentes. Para abrir una conexión
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 conexión persistente tendrá la conexión tal cual.
Toda la limpieza tendría que ser realizada por el nuevo proceso cliente antes
de que pudiera hacer buen uso de la conexión persistente, aumentando la
carga sobre el programador.

La conexión persistente de la extensión mysqli no obstante incorpora manejo


para limpieza de código. La limpieza llevada a cabo por mysqli incluye:

o Rollback de transacciones activas


o Cierre y borrado de tablas temporales
o Desbloque de tablas
o Reestablece variables de sesión
o Cerrar consultas preparadas (siempre pasa con PHP)
o Cerrar controlador
o 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 extensión mysqli hace la limpieza automáticamente llamando a la


función mysql_change_user() de C-API.

La característica de limpieza automática tiene sus ventajas y desventajas


aunque. La ventaja es que el programador no necesita preocuparse por estar
añadiendo el código de limpieza, ya que es llamdo automáticamente. Asi
mismo, la desventaja es que el código podría volverse potencialmente un poco
más lento, pues el código para realizar la limpieza necesita ejecutarse cada vez
que una conexión es devuelta por el conjunto de conexiones.

52
Es posible desactivar el código de limpieza automática, mediante la
compilación de PHP si se define MYSQLI_NO_CHANGE_USER_ON_PCONNECT.

Nota:
La extensión mysqli soporta conexiones persistentes utilizando ya sea el driver
nativo de MySQL o la libreria cliente de MySQL.

Constantes predefinidas ¶
Estas constantes están definidas por esta extensión y estarán disponibles sólo
cuando la extensión haya sido compilada con PHP, o bien sea cargada
dinámicamente en ejecución.

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 conexión 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


re-ejecutado automáticamente cuando se reconecta.

MYSQLI_CLIENT_SSL

Usar SSL (protocolo de cifrado). Esta opción no debe ser fijado por los
programas de aplicación; se establece internamente en la biblioteca
cliente de MySQL

MYSQLI_CLIENT_COMPRESS

Usar protocolo de compresión

MYSQLI_CLIENT_INTERACTIVE

Permite interactive_timeout segundos (en lugar


de wait_timeout segundos) de inactividad antes de cerrar la conexión. La

53
variable sesión del cliente wait_timeout se establecerá en el valor de la
variable de sesión interactive_timeout.

MYSQLI_CLIENT_IGNORE_SPACE

Permite espacios después de nombres de función. 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


numérico 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

54
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 precisión matemática 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

55
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

56
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

Más datos disponibles para enlazar la variable

MYSQLI_NO_DATA

57
No más 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 erróneo en una


conuslta.

MYSQLI_REPORT_ERROR

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

MYSQLI_REPORT_STRICT

Lanza una excepción 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 información.

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.

58
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 réplica: reinicia la información maestra del


servidor, y reanuda el servidor. Como al ejecutar la
sentencia SQL RESET SLAVE.

MYSQLI_REFRESH_MASTER

En un servidor esclavo de réplica: 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

Añade "AND CHAIN" a mysqli_commit() o mysqli_rollback().

MYSQLI_TRANS_COR_AND_NO_CHAIN

Añade "AND NO CHAIN" a mysqli_commit() o mysqli_rollback().

MYSQLI_TRANS_COR_RELEASE

Añade "RELEASE" a mysqli_commit() o mysqli_rollback().

MYSQLI_TRANS_COR_NO_RELEASE

Añade "NO RELEASE" a mysqli_commit() o mysqli_rollback().

MYSQLI_TRANS_START_READ_ONLY

59
Iniciar la transacción como "START TRANSACTION READ ONLY"
con mysqli_begin_transaction().

MYSQLI_TRANS_START_READ_WRITE

Iniciar la transacción como "START TRANSACTION READ WRITE"


com mysqli_begin_transaction().

MYSQLI_TRANS_START_CONSISTENT_SNAPSHOT

Iniciar la transacción como "START TRANSACTION WITH


CONSISTENT SNAPSHOT" con mysqli_begin_transaction().

Notas ¶
Algunas notas sobre la implementación:

1. El soporte para MYSQL_TYPE_GEOMETRY fue agregado a la


extensión MySQLi en PHP 5.3.
2. Nótese que existen diferentes implementaciones internas
en libmysqlclient y mysqlnd para manejar columnas del
tipo MYSQL_TYPE_GEOMETRY. En términos
generales, mysqlnd asignará significativamente menos memoria. Por
ejemplo, si hay una columna POINT 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 asignación de memoria es mucho menor, menos de 50
bytes, si se utiliza mysqlnd.

60
Resumen de las funciones de la extensión MySQLi ¶
Resumen de los métodos de mysqli
Clase mysqli
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
Propiedades
$mysqli::affected_rows mysqli_affected_rows() N/A Obtiene el número de filas
afectadas en una operación
previa de MySQL
$mysqli::client_info mysqli_get_client_info() N/A Devuelve la versión del
cliente de MySQL como una
cadena
$mysqli::client_version mysqli_get_client_version() N/A Devuelve la versión del
cliente de MySQL como un
entero
$mysqli::connect_errno mysqli_connect_errno() N/A Devuelve el código de error
de la última llamada de
conexión
$mysqli::connect_error mysqli_connect_error() N/A Devuelve una cadena
descriptiva del último error de
conexión
$mysqli::errno mysqli_errno() N/A Devuelve el código de error
para la función invocada más
reciente
$mysqli::error mysqli_error() N/A Devulve una cadena
descriptiva del último error

61
Resumen de los métodos de mysqli
Clase mysqli
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
$mysqli::field_count mysqli_field_count() N/A Devuelve el número de
columnas de la consulta más
reciente
$mysqli::host_info mysqli_get_host_info() N/A Devuelve una cadena que
representa el tipo de
conexión utilizado
$mysqli::protocol_version mysqli_get_proto_info() N/A Devuelve la versión del
protocolo de MySQL usada
$mysqli::server_info mysqli_get_server_info() N/A Devuelve la versión del
servidor MySQL
$mysqli::server_version mysqli_get_server_version() N/A Devuelve la versión del
servidor MySQL como un
entero
$mysqli::info mysqli_info() N/A Recupera información sobre
la última consulta ejecutada
$mysqli::insert_id mysqli_insert_id() N/A Devuelve el identificador (ID)
autogenerado usado en la
última consulta
$mysqli::sqlstate mysqli_sqlstate() N/A Devuelve el error SQLSTATE
de la operación previa de
MySQL
$mysqli::warning_count mysqli_warning_count() N/A Devuelve el número de
advertencias de la última
consulta para el enlace dado
Methods

62
Resumen de los métodos de mysqli
Clase mysqli
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
mysqli::autocommit() mysqli_autocommit() N/A Activa o desactiva la
autoconsigna de
modificaciones de la base de
datos
mysqli::change_user() mysqli_change_user() N/A Cambia el usuario de la
conexión de base de datos
especificada
mysqli::character_set_name(), mysqli::client_encoding mysqli_character_set_name() mysqli_client_encoding() Devuelve el juego de
caracteres predeterminado
para la conexión de base de
datos
mysqli::close() mysqli_close() N/A Cierra una conexión de base
de datos previamente abierta
mysqli::commit() mysqli_commit() N/A Ejecuta la transacción actual
mysqli::__construct() mysqli_connect() N/A Abrir una nueva conexión al
servidor MySQL [Nota:
método estático (es decir, de
clase)]
mysqli::debug() mysqli_debug() N/A Realiza operaciones de
depuración
mysqli::dump_debug_info() mysqli_dump_debug_info() N/A Volcado de la información de
depuración en el registro
mysqli::get_charset() mysqli_get_charset() N/A Devuelve un conjunto de
caracteres objeto

63
Resumen de los métodos de mysqli
Clase mysqli
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
mysqli::get_connection_stats() mysqli_get_connection_stats() N/A Devuelve las estadísticas de
conexión de cliente.
Disponible sólo con mysqlnd.
mysqli::get_client_info() mysqli_get_client_info() N/A Devuelve la versión de cliente
de MySQL como una cadena
mysqli::get_client_stats() mysqli_get_client_stats() N/A Devuelve las estadísticas del
cliente por proceso.
Disponible sólo con mysqlnd.
mysqli::get_cache_stats() mysqli_get_cache_stats() N/A Devuelve las estadísticas de
clientes Zval caché.
Disponible sólo con mysqlnd.
mysqli::get_server_info() mysqli_get_server_info() N/A Devuelve un string que
representa la versión del
servidor de MySQL a la que
está conectada la extensión
MySQLi
mysqli::get_warnings() mysqli_get_warnings() N/A NO DOCUMENTADA
mysqli::init() mysqli_init() N/A Inicializa MySQLi y devuelve
un recurso para su uso con
mysqli_real_connect. [No
invocado dentro de un objeto,
ya que devuelve un objeto $
mysqli.]
mysqli::kill() mysqli_kill() N/A Pide al servidor matar un hilo
de MySQL

64
Resumen de los métodos de mysqli
Clase mysqli
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
mysqli::more_results() mysqli_more_results() N/A Compruebe si hay más
resultados para una consulta
de múltiple
mysqli::multi_query() mysqli_multi_query() N/A Ejecuta una consulta en la
base de datos
mysqli::next_result() mysqli_next_result() N/A Prepara próximo resultado de
multi_query
mysqli::options() mysqli_options() mysqli_set_opt() Establecer opciones
mysqli::ping() mysqli_ping() N/A Hace ping una conexión de
servidor, o intenta volver a
conectar si la conexión se ha
caído
mysqli::prepare() mysqli_prepare() N/A Prepara una sentencia SQL
para su ejecución
mysqli::query() mysqli_query() N/A Ejecuta una consulta en la
base de datos
mysqli::real_connect() mysqli_real_connect() N/A Abre una conexión a un
servidor MySQL
mysqli::real_escape_string(), mysqli::escape_string() mysqli_real_escape_string() mysqli_escape_string() Escapa caracteres especiales
de una cadena en una
sentencia SQL, teniendo en
cuenta el conjunto de
caracteres actual de la
conexión
mysqli::real_query() mysqli_real_query() N/A Ejecutar una consulta SQL

65
Resumen de los métodos de mysqli
Clase mysqli
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
mysqli::refresh() mysqli_refresh() N/A Vuelca tablas o caches, o
reinicia la información del
servidor réplica
mysqli::rollback() mysqli_rollback() N/A Deshace la transacción actual
mysqli::select_db() mysqli_select_db() N/A Selecciona la base de datos
predeterminada para las
consultas de la base de datos
mysqli::set_charset() mysqli_set_charset() N/A Establece el conjunto de
carácteres predeterminado
del cliente
mysqli::set_local_infile_default() mysqli_set_local_infile_default() N/A Quita el controlador de
usuario definidos para la
carga de comandos infile
locales
mysqli::set_local_infile_handler() mysqli_set_local_infile_handler() N/A establece la funcion callback
para el comando LOAD
DATA LOCAL INFILE
mysqli::ssl_set() mysqli_ssl_set() N/A Utilizada para establecer
conexiones seguras usando
SSL
mysqli::stat() mysqli_stat() N/A Obtiene el estado actual del
sistema
mysqli::stmt_init() mysqli_stmt_init() N/A Inicializa una sentencia y
devuelve un objeto para su
uso con mysqli_stmt_prepare

66
Resumen de los métodos de mysqli
Clase mysqli
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
mysqli::store_result() mysqli_store_result() N/A Transfier un conjunto de
resultados de la última
consulta
mysqli::thread_id() mysqli_thread_id() N/A Retorna el ID del hilo para la
conexión actual
mysqli::thread_safe() mysqli_thread_safe() N/A Retorna si la seguridad del
hilo enlace se da o no
mysqli::use_result() mysqli_use_result() N/A Inicia un conjunto de
resultados de recuperación
Resumen de los métodos
de mysqli_stmt
MySQL_STMT
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
Propiedades
$mysqli_stmt::affected_rows mysqli_stmt_affected_rows() N/A Devuelve el número total de registros actualizados,
eliminados o insertados por la última sentencia
ejecutada
$mysqli_stmt::errno mysqli_stmt_errno() N/A Devuelve el código de error para la sentencia
recientemente llamada
$mysqli_stmt::error mysqli_stmt_error() N/A Devuelve una cadena de descripción de la última
sentencia de error
$mysqli_stmt::field_count mysqli_stmt_field_count() N/A Devuelve el número de campo en la sentencia dada -
no ducumentada
$mysqli_stmt::insert_id mysqli_stmt_insert_id() N/A Obtener el Identificador (ID) generado en la operación
de INSERT anterior

67
Resumen de los métodos
de mysqli_stmt
MySQL_STMT
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
$mysqli_stmt::num_rows mysqli_stmt_num_rows() N/A Devuelve el número de filas en las sentencias del
conjunto de resultados
$mysqli_stmt::param_count mysqli_stmt_param_count() mysqli_param_count() Devuelve el número de parámetros para la sentencia
dada
$mysqli_stmt::sqlstate mysqli_stmt_sqlstate() N/A Devuelve el error SQLSTATE de la operación de la
declaración anterior
Métodos
mysqli_stmt::attr_get() mysqli_stmt_attr_get() N/A Usado para obtener el valor actual de un atributo de
una setencia
mysqli_stmt::attr_set() mysqli_stmt_attr_set() N/A Usado para modificar el comportamiento de una
sentencia preparada
mysqli_stmt::bind_param() mysqli_stmt_bind_param() mysqli_bind_param() Agrega variables a una sentencia preparada como
parámetros
mysqli_stmt::bind_result() mysqli_stmt_bind_result() mysqli_bind_result() Agrega variables a una sentencia prepearada para el
almacenamiento de resultado
mysqli_stmt::close() mysqli_stmt_close() N/A Cierra una sentencia preparada
mysqli_stmt::data_seek() mysqli_stmt_data_seek() N/A Busca a una fila arbitraria en el conjunto de resultados
de una sentencia
mysqli_stmt::execute() mysqli_stmt_execute() mysqli_execute() Ejecuta una consulta preparada
mysqli_stmt::fetch() mysqli_stmt_fetch() mysqli_fetch() Recuperar los resultados de una sentencia preparada
en las variables ligadas
mysqli_stmt::free_result() mysqli_stmt_free_result() N/A Libera la memoria almacenada resultado del manejar
de sentencia

68
Resumen de los métodos
de mysqli_stmt
MySQL_STMT
Interfaz POO Interfaz de procedimiento Alias (no usar) Descripción
mysqli_stmt::get_result() mysqli_stmt_get_result() N/A Obtiene un conjunto de resultados de una sentencia
preparada Disponible sólo con mysqlnd.
mysqli_stmt::get_warnings() mysqli_stmt_get_warnings() N/A NO DOCUMENTADA
mysqli_stmt::more_results() mysqli_stmt_more_results() N/A Comprueba si existen más resultados de consultas de
una consulta múltiple
mysqli_stmt::next_result() mysqli_stmt_next_result() N/A Lee el siguiente resultado de una consulta múltiple
mysqli_stmt::num_rows() mysqli_stmt_num_rows() N/A Véase también la propiedad $mysqli_stmt::num_rows
mysqli_stmt::prepare() mysqli_stmt_prepare() N/A Preparar una sentencia SQL para su ejecución
mysqli_stmt::reset() mysqli_stmt_reset() N/A Restablece una sentencia preparada
mysqli_stmt::result_metadata() mysqli_stmt_result_metadata() mysqli_get_metadata() Devuelve un conjunto de resultados de metadatos de
una setencia preparada
mysqli_stmt::send_long_data() mysqli_stmt_send_long_data() mysqli_send_long_data() Envia los datos en bloques
mysqli_stmt::store_result() mysqli_stmt_store_result() N/A Transfiere un conjunto de resultados de una sentencia
preparada
Resumen de los métodos de mysqli_result
mysqli_result
Alias
Interfaz de
Interfaz POO (No Descripcíon
procedimiento
usar)
Propiedades
$mysqli_result::current_field mysqli_field_tell() N/A Obtener el campo de desplazamiento
actual de un puntero de resultado
$mysqli_result::field_count mysqli_num_fields() N/A Obtiene el número de campos de un
resultado

69
Resumen de los métodos de mysqli_result
mysqli_result
Alias
Interfaz de
Interfaz POO (No Descripcíon
procedimiento
usar)
$mysqli_result::lengths mysqli_fetch_lengths() N/A Devuelve la longitud de las columnas de
la fila actual en el conjunto de resultados
$mysqli_result::num_rows mysqli_num_rows() N/A Obtiene el número de filas de un resultado
Métodos
mysqli_result::data_seek() mysqli_data_seek() N/A Ajusta el puntero del resultado a una fila
arbitraria en el resultado
mysqli_result::fetch_all() mysqli_fetch_all() N/A Obtiene todas las filas de resultados y
devuelve el resultado como un array
asociativo, una array numérico, o ambos.
Disponible sólo con mysqlnd.
mysqli_result::fetch_array() mysqli_fetch_array() N/A Extrae la fila de deresultados como
asociativo, un array numérico, o ambas
mysqli_result::fetch_assoc() mysqli_fetch_assoc() N/A Extrae la fila de resultados como un array
asociativo
mysqli_result::fetch_field_direct() mysqli_fetch_field_direct() N/A Extrae metadatos para un solo campo
mysqli_result::fetch_field() mysqli_fetch_field() N/A Devuelve el siguiente campo en el
conjunto de resultados
mysqli_result::fetch_fields() mysqli_fetch_fields() N/A Devuelve un array de objetos que
representan los campos de un conjunto
de resultados
mysqli_result::fetch_object() mysqli_fetch_object() N/A Devuelve la fila actual del resultado en
forma de un objeto
mysqli_result::fetch_row() mysqli_fetch_row() N/A Obtiene una fila de resultados como un
array enumerado

70
Resumen de los métodos de mysqli_result
mysqli_result
Alias
Interfaz de
Interfaz POO (No Descripcíon
procedimiento
usar)
mysqli_result::field_seek() mysqli_field_seek() N/A Establece el puntero del resultado a un
determinado campo de desplazamiento
mysqli_result::free(), mysqli_result::close, mysqli_result::free_result mysqli_free_result() N/A Libera la memoria asociada con un
resultado
Resumen de los métodos
de mysqli_driver
MySQL_Driver
Alias (no
Interfaz POO Interfaz de procedimiento Descripción
usar)
Propiedades
N/A
Métodos
mysqli_driver::embedded_server_end() mysqli_embedded_server_end() N/A NO DOCUMENTADA
mysqli_driver::embedded_server_start() mysqli_embedded_server_start() N/A NO DOCUMENTADA

Nota:
Las funciones alias se proporcionan para compatibilidad con versiones anteriores solamente. No los use en nuevos proyectos.

71
Ejemplos ¶
Tabla de contenidos ¶

 Ejemplos básicos de la extensión MySQLi

Ejemplos básicos de la extensión MySQLi ¶

Este ejemplo muestra cómo conectarse, ejecutar una consulta, utilizar un


manejo de errores básico, imprimir filas de resultados, y desconectarse de una
base de datos de MySQL.

Este ejemplo emplea la base de datos de libre disposición Sakila, la cual puede
descargarse desde » dev.mysql.com, tal como se describe aquí. Para que este
ejemplo funcione, (a) instalar sakila y (b) modificar las variables de conexión
(host, tu_usuario, tu_contraseña).

Ejemplo #1 Ejemplo resumen de la extensión MySQLi

<?php
// Vamos a pasar una variable $_GET a nuestro ejemplo, en este caso es
// 'aid' para 'actor_id' de nuestra base de datos Sakila. Le vamos a a
signar un
// valor predeterminado de 1, y a amoldarla a un integer para evitar i
nyecciones
// de SQL y/o problemas de seguridad relacionados. El manejo de todo e
sto va más
// allá del alcance de este sencillo ejemplo:
// http://example.org/script.php?aid=42
if (isset($_GET['aid']) && is_numeric($_GET['aid'])) {
$aid = (int) $_GET['aid'];
} else {
$aid = 1;
}

// Conectarse a y seleccionar una base de datos de MySQL llamada sakil


a
// Nombre de host: 127.0.0.1, nombre de usuario: tu_usuario, contraseñ
a: tu_contraseña, bd: sakila
$mysqli = new mysqli('127.0.0.1', 'tu_usuario', 'tu_contraseña', 'saki
la');

// ¡Oh, no! Existe un error 'connect_errno', fallando así el intento d


e conexión
if ($mysqli->connect_errno) {
// La conexión falló. ¿Que vamos a hacer?
// Se podría contactar con uno mismo (¿email?), registrar el error
, mostrar una bonita página, etc.
// No se debe revelar información delicada

// Probemos esto:
echo "Lo sentimos, este sitio web está experimentando problemas.";

72
// Algo que no se debería de hacer en un sitio público, aunque est
e ejemplo lo mostrará
// de todas formas, es imprimir información relacionada con errore
s de MySQL -- se podría registrar
echo "Error: Fallo al conectarse a MySQL debido a: \n";
echo "Errno: " . $mysqli->connect_errno . "\n";
echo "Error: " . $mysqli->connect_error . "\n";

// Podría ser conveniente mostrar algo interesante, aunque nosotro


s simplemente saldremos
exit;
}

// Realizar una consulta SQL


$sql = "SELECT actor_id, first_name, last_name FROM actor WHERE actor_
id = $aid";
if (!$resultado = $mysqli->query($sql)) {
// ¡Oh, no! La consulta falló.
echo "Lo sentimos, este sitio web está experimentando problemas.";

// De nuevo, no hacer esto en un sitio público, aunque nosotros mo


straremos
// cómo obtener información del error
echo "Error: La ejecución de la consulta falló debido a: \n";
echo "Query: " . $sql . "\n";
echo "Errno: " . $mysqli->errno . "\n";
echo "Error: " . $mysqli->error . "\n";
exit;
}

// ¡Uf, lo conseguimos!. Sabemos que nuestra conexión a MySQL y nuestr


a consulta
// tuvieron éxito, pero ¿tenemos un resultado?
if ($resultado->num_rows === 0) {
// ¡Oh, no ha filas! Unas veces es lo previsto, pero otras
// no. Nosotros decidimos. En este caso, ¿podría haber sido
// actor_id demasiado grande?
echo "Lo sentimos. No se pudo encontrar una coincidencia para el I
D $aid. Inténtelo de nuevo.";
exit;
}

// Ahora, sabemos que existe solamente un único resultado en este ejem


plo, por lo
// que vamos a colocarlo en un array asociativo donde las claves del m
ismo son los
// nombres de las columnas de la tabla
$actor = $resultado->fetch_assoc();
echo "A veces veo a " . $actor['first_name'] . " " . $actor['last_name
'] . " en la TV.";

// Ahora, vamor a obtener cinco actores aleatorios y a imprimir sus no


mbres en una lista.
// El manejo de errores va a ser menor aquí, aunque ya sabemos como ha
cerlo
$sql = "SELECT actor_id, first_name, last_name FROM actor ORDER BY ran

73
d() LIMIT 5";
if (!$resultado = $mysqli->query($sql)) {
echo "Lo sentimos, este sitio web está experimentando problemas.";
exit;
}

// Imprimir nuestros cinco actores aleatorios en una lista, y enlazar


cada uno
echo "<ul>\n";
while ($actor = $resultado->fetch_assoc()) {
echo "<li><a href='" . $_SERVER['SCRIPT_FILENAME'] . "?aid=" . $ac
tor['actor_id'] . "'>\n";
echo $actor['first_name'] . ' ' . $actor['last_name'];
echo "</a></li>\n";
}
echo "</ul>\n";

// El script automáticamente liberará el resultado y cerrará la conexi


ón
// a MySQL cuando finalice, aunque aquí lo vamos a hacer nostros mismo
s
$resultado->free();
$mysqli->close();
?>

74
La clase mysqli ¶
(PHP 5, PHP 7)
Introducción ¶

Representa una conexión entre PHP y una base de datos MySQL.

Sinopsis de la Clase ¶
mysqli {
/* Propiedades */
int $affected_rows;
int $connect_errno;
string $connect_error;
int $errno;
array $error_list;
string $error;
int $field_count;
int $client_version;
string $host_info;
string $protocol_version;
string $server_info;
int $server_version;
string $info;
mixed $insert_id;
string $sqlstate;
int $thread_id;
int $warning_count;
/* Métodos */
__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") ]]]]]] )

autocommit ( bool $mode ) : bool

change_user ( string $user , string $password , string $database ) : bool


character_set_name ( void ) : string

75
close ( void ) : bool
commit ([ int $flags [, string $name ]] ) : bool

debug ( string $message ) : bool


dump_debug_info ( void ) : bool
get_charset ( void ) : object
get_client_info ( void ) : string
get_connection_stats ( void ) : bool
mysqli_stmt::get_server_info ( void ) : string
get_warnings ( void ) : mysqli_warning
init ( void ) : mysqli
kill ( int $processid ) : bool
more_results ( void ) : bool
multi_query ( string $query ) : bool
next_result ( void ) : bool
options ( int $option , mixed $value ) : bool
ping ( void ) : bool

public static poll ( array &$read , array &$error , array &$reject , int $sec [, int $usec
] ) : int
prepare ( string $query ) : mysqli_stmt

query ( string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed

real_connect ([ string $host [, string $username [, string $passwd [, string $dbname [, int
$port [, string $socket [, int $flags ]]]]]]] ) : bool

escape_string ( string $escapestr ) : string

real_query ( string $query ) : bool


public reap_async_query ( void ) : mysqli_result
public refresh ( int $options ) : bool

rollback ([ int $flags [, string $name ]] ) : bool

rpl_query_type ( string $query ) : int

select_db ( string $dbname ) : bool

send_query ( string $query ) : bool

set_charset ( string $charset ) : bool

set_local_infile_handler ( mysqli $link , callable $read_func ) : bool

76
ssl_set ( string $key , string $cert , string $ca , string $capath , string $cipher ) : bool
stat ( void ) : string
stmt_init ( void ) : mysqli_stmt
store_result ([ int $option ] ) : mysqli_result
use_result ( void ) : mysqli_result
}

mysqli::$affected_rows
mysqli_affected_rows
(PHP 5, PHP 7)

mysqli::$affected_rows -- mysqli_affected_rows — Obtiene el número de filas


afectadas en la última operación MySQL

Descripción ¶

Estilo orientado a objetos

int $mysqli->affected_rows;

Estilo por procedimientos

mysqli_affected_rows ( mysqli $link ) : int

Devuelve el numero de filas afectadas por la última


consulta INSERT, UPDATE, REPLACE or DELETE.

Para instrucciones SELECT mysqli_affected_rows() es equivalente


a mysqli_num_rows().

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Un entero mayor que cero indica el número de filas afectadas o recuperadas. El


cero indica que no hay registros en una actualización con una sentencia

77
UPDATE, que no hay filas que cumplan la cláusula WHERE de la sentencia o
que ninguna consulta ha sido ejecutada todavía. -1 indica que la consulta
devolvió un error.

Nota:
Si el número de filas afectadas es mayor de el máximo valor entero
( PHP_INT_MAX ), dicho número 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 conexión */
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 conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

78
if (!$link) {
printf("Can't connect to localhost. Error: %s\n", mysqli_connect_e
rror());
exit();
}

/* Inserta filas */
mysqli_query($link, "CREATE TABLE Language SELECT * from CountryLangua
ge");
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 > 5
0");
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 conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Affected rows (INSERT): 984


Affected rows (UPDATE): 168
Affected rows (DELETE): 815
Affected rows (SELECT): 169
Ver también ¶

 mysqli_num_rows() - Obtiene el número de filas de un resultado


 mysqli_info() - Obtiene la información de la última consulta ejecutada

79
mysqli::autocommit
mysqli_autocommit
(PHP 5, PHP 7)

mysqli::autocommit -- mysqli_autocommit — Activa o desactiva las


modificaciones de la base de datos autoconsignadas

Descripción ¶

Estilo orientado a objetos

mysqli::autocommit ( bool $mode ) : bool

Estilo por procedimientos

mysqli_autocommit ( mysqli $link , bool $mode ) : bool

Activa o desactiva el modo 'auto-commit' en consultas para la conexión a la


base de datos.

Para determinar el estado actual de la autoconsigna se ha de utilzar el


comando SQL SELECT @@autocommit.

Parámetros ¶
link

Sólo 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 función no puede aplicarse a tipos de tablas no transaccionales (como
MyISAM o ISAM).
Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli::autocommit()

Estilo orientado a objetos


80
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

if (mysqli_connect_errno()) {
printf("Fallo la conexión: %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 conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

if (!$enlace) {
printf("Imposible conectar a localhost. Error: %s\n", mysqli_conne
ct_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 sería:

El estado de la autoconsigna es 1
Ver también ¶

 mysqli_begin_transaction() - Inicia una transacción


 mysqli_commit() - Consigna la transacción actual
 mysqli_rollback() - Revierte la transacción actual

81
mysqli::begin_transaction
mysqli_begin_transaction
(PHP 5 >= 5.5.0, PHP 7)

mysqli::begin_transaction -- mysqli_begin_transaction — Inicia una transacción

Descripción ¶

Estilo orientado a objetos (método):

public mysqli::begin_transaction ([ int $flags [, string $name ]] )


: bool

Estilo por procedimientos:

mysqli_begin_transaction ( mysqli $link [, int $flags [, string $name


]] ) : bool

Comienza una transacción. Requiere MySQL 5.6 y superior, y el motor InnoDB


(está habilitado por defecto). Para detalles adicionales sobre cómo funcionan
las transacciones de MySQL,
véase » http://dev.mysql.com/doc/mysql/en/commit.html.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

flags

Banderas. Las válidas son:

o MYSQLI_TRANS_START_READ_ONLY:Inicia la transacción como


"START TRANSACTION READ ONLY".
o MYSQLI_TRANS_START_READ_WRITE: Inicia la transacción como
"START TRANSACTION READ WRITE".
o MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT: Inicia la
transacción como "START TRANSACTION WITH CONSISTENT
SNAPSHOT".

name

Nombre del punto de prevención de la transacción.

82
Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Ejemplo de $mysqli->begin_transaction()

Estilo orientado a objetos

<?php
$mysqli = new mysqli("127.0.0.1", "mi_usuario", "mi_contraseña", "saki
la");

if ($mysqli->connect_errno) {
printf("Conexión fallida: %s\n", $mysqli->connect_error);
exit();
}

$mysqli->begin_transaction(MYSQLI_TRANS_START_READ_ONLY);

$mysqli->query("SELECT first_name, last_name FROM actor");


$mysqli->commit();

$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect("127.0.0.1", "mi_usuario", "mi_contraseña", "
sakila");

if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

mysqli_begin_transaction($enlace, MYSQLI_TRANS_START_READ_ONLY);

mysqli_query($enlace, "SELECT first_name, last_name FROM actor LIMIT 1


");
mysqli_commit($enlace);

mysqli_close($enlace);
?>

Ver también ¶

 mysqli_autocommit() - Activa o desactiva las modificaciones de la base de


datos autoconsignadas
 mysqli_commit() - Consigna la transacción actual
 mysqli_rollback() - Revierte la transacción actual

83
mysqli::change_user
mysqli_change_user
(PHP 5, PHP 7)

mysqli::change_user -- mysqli_change_user — Cambia el usuario de la


conexión de bases de datos especificada

Descripción ¶

Estilo orientado a objetos

mysqli::change_user ( string $user , string $password , string $databa


se ) : bool

Estilo por procedimientos

mysqli_change_user ( mysqli $link , string $user , string $password ,


string $database ) : bool

Cambia el usuario de la conexión de base de datos especificada y establece la


base de datos actual.

Para realizar con éxito el cambio de usuarios, un username y password válidos


deben ser indicados y ese usuario debe tener suficientes permisos para
acceder a la base de datos deseada. Si por cualquier razón la autorización
falla, se mantendrá la autenticación de usuario existente.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

user

Nombre de usuario de MySQL.

password

Contraseña de MySQL.

database

84
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 función 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 conexión a la base de datos
actual se comporte como una conexión completamente nueva,
independientemente de si la operación se ha completado con éxito. Este
reinicio incluye la realización de un "rollback" a cualquier transacción activa,
cerrando todas las tablas temporales, y desbloqueando todas las tablas
bloqueadas.
Ejemplos ¶

Ejemplo #1 Ejemplo del método mysqli::change_user()

Estilo orientado a objetos

<?php

/* connect database test */


$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "test
");

/* check connection */
if (mysqli_connect_errno()) {
printf("Error de conexión: %s\n", mysqli_connect_error());
exit();
}

/* Set Variable a */
$mysqli->query("SET @a:=1");

/* reiniciando todo, y realizando una nueva conexión 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");

85
}
$result->close();
}

/* close connection */
$mysqli->close();
?>

Estilo por procedimientos

<?php
/* connect database test */
$link = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "te
st");

/* check connection */
if (!$link) {
printf("Error de conexión: %s\n", mysqli_connect_error());
exit();
}

/* Set Variable a */
mysqli_query($link, "SET @a:=1");

/* reinciando todo y realizando una nueva conexión 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 conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Default database: world


Value of variable a is NULL
Ver también ¶

 mysqli_connect() - Alias de mysqli::__construct


 mysqli_select_db() - Selecciona la base de datos por defecto para realizar las
consultas

86
mysqli::character_set_name
mysqli_character_set_name
(PHP 5, PHP 7)

mysqli::character_set_name -- mysqli_character_set_name — Devuelve el


juego de caracteres predeterminado para la conexión a la base de datos

Descripción ¶

Estilo orientado a objetos

mysqli::character_set_name ( void ) : string

Estilo por procedimientos

mysqli_character_set_name ( mysqli $link ) : string

Devuelve el juego de caracteres actual para la conexión a la base de datos.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

El juego de caracteres predeterminado para la conexión actual

Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli::character_set_name()

Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("La conexión falló: %s\n", mysqli_connect_error());

87
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 conexión */
$link = mysqli_connect("localhost", "my_user", "my_password", "world")
;

/* comprobar la conexión */
if (!$link) {
printf("La conexión 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 sería:

El juego de caracteres en uso es latin1_swedish_ci


Ver también ¶

 mysqli_set_charset() - Establece el conjunto de caracteres predeterminado del


cliente
 mysqli_client_encoding() - Alias de mysqli_character_set_name
 mysqli_real_escape_string() - Escapa los caracteres especiales de una cadena
par

mysqli::close
mysqli_close

88
(PHP 5, PHP 7)

mysqli::close -- mysqli_close — Cierra una conexión previamente abierta a una


base de datos

Descripción ¶

Estilo orientado a objetos

mysqli::close ( void ) : bool

Estilo por procedimientos

mysqli_close ( mysqli $link ) : bool

Cierra una conexión abierta previamente a base de datos.

Las conexiones de MySQL no persistentes y los conjuntos de resultados son


automáticamente destruidos cuando un script de PHP finaliza su ejecución. Por
tanto, aunque el cierre explícito de conexiones abiertas y la liberación de
conjuntos de resultados sean opcionales, se recomienda hacerlos. Así, se
devolverán inmediatamente los recursos a PHP y a MySQL, lo que puede
mejorar el rendimiento. Para información detalla, véase la liberación de
recursos

Parámetros ¶
link

Sólo 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().

Notas ¶
Nota:
mysqli_close() no cerrará las conexiones persistentes. Para más detalles,
véase la página del manual sobre conexiones persistentes.
Ver también ¶

 mysqli::__construct() - Abre una nueva conexión al servidor de MySQL


 mysqli_init() - Inicializa y devuelve un recurso para utilizarlo con
mysqli_real_connect()
 mysqli_real_connect() - Abre una conexión a un servidor mysql
 mysqli_free_result() - Libera la memoria asociada a un resultado

89
mysqli::commit
mysqli_commit
(PHP 5, PHP 7)

mysqli::commit -- mysqli_commit — Consigna la transacción actual

Descripción ¶

Estilo orientado a objetos

mysqli::commit ([ int $flags [, string $name ]] ) : bool

Estilo por procedimientos

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


: bool

Consigna la transacción actual para la conexión a la base de datos.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

flags

Una máscara 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 ¶

Versión Descripción
5.5.0 Se añadieron los parámetros flags y name.

90
Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli::commit()

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* Comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %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 transacción */
if (!$mysqli->commit()) {
print("Falló la consignación de la transacción\n");
exit();
}

/* Eliminar la tabla */
$mysqli->query("DROP TABLE Language");

/* Cerrar la conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

/* Comprobar la conexión */
if (!$enlace) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

/* Desactivar la autoconsignación */
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)");

91
mysqli_query($enlace, "INSERT INTO Language VALUES ('DEU', 'Swabian',
'F', 9.4)");

/* Consignar la transación */
if (!mysqli_commit($enlace)) {
print("Falló la consignación de la transacción\n");
exit();
}

/* Cerrar la conexión */
mysqli_close($enlace);
?>

Ver también ¶

 mysqli_autocommit() - Activa o desactiva las modificaciones de la base


de datos autoconsignadas
 mysqli_begin_transaction() - Inicia una transacción
 mysqli_rollback() - Revierte la transacción actual
 mysqli_savepoint() - Define el nombre de un punto de salvaguarda de la
transacción

mysqli::$connect_errno
mysqli_connect_errno
(PHP 5, PHP 7)

mysqli::$connect_errno -- mysqli_connect_errno — Devuelve el código de error


de la última llamada

Descripción ¶

Estilo orientado a objetos

int $mysqli->connect_errno;

Estilo por procedimientos

mysqli_connect_errno ( void ) : int

Devuelve el ultimo código de error de la última llamada mysqli_connect().

Nota:
Los números de los mensajes de error están listados en el fichero de
cabeceras de MySQL errmsg.h, los números de los mensajes de error del

92
servidor están listados en mysqld_error.h. En la distribución de código fuente
puede encontrar una lista completa de los mensajes de error y sus números en
el fichero Docs/mysqld_error.txt.

Valores devueltos ¶

Un código de error para la ultima llamada a mysqli_connect(), si ha fallado. cero


significa que no ha ocurrido ningún 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_d
b');

if (!$link) {
die('Connect Error: ' . mysqli_connect_errno());
}
?>

El resultado de los ejemplos sería:

Connect Error: 1045

Ver también ¶

 mysqli_connect() - Alias de mysqli::__construct


 mysqli_connect_error() - Devuelve una cadena con la descripción del
último error de conexión
 mysqli_errno() - Devuelve el código del error de la última función llamada
 mysqli_error() - Devuelve una cadena que describe el último error
 mysqli_sqlstate() - Devuelve el error SQLSTATE de la operación de
MySQL previa

mysqli::$connect_error
93
mysqli_connect_error
(PHP 5, PHP 7)

mysqli::$connect_error -- mysqli_connect_error — Devuelve una cadena con la


descripción del último error de conexión

Descripción ¶

Estilo orientado a objetos

string $mysqli->connect_error;

Estilo por procedimientos

mysqli_connect_error ( void ) : string

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 ningún


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 conexión: ' . $mysqli->connect_error);
}
?>

Estilo por procedimientos

<?php
$link = @mysqli_connect('localhost', 'fake_user', 'my_password', 'my_d
b');

if (!$link) {
die('Error de conexión: ' . mysqli_connect_error());
}
?>

El resultado de los ejemplos sería:


94
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 funciónmysqli_connect_error() si es
necesaria la compatibilidad con versiones anteriores de PHP.

Ver también ¶

 mysqli_connect() - Alias de mysqli::__construct


 mysqli_connect_errno() - Devuelve el código de error de la última
llamada
 mysqli_errno() - Devuelve el código del error de la última función llamada
 mysqli_error() - Devuelve una cadena que describe el último error
 mysqli_sqlstate() - Devuelve el error SQLSTATE de la operación de
MySQL previa

mysqli::__construct
mysqli_connect
(PHP 5, PHP 7)

mysqli::__construct -- mysqli_connect — Abre una nueva conexión al servidor


de MySQL

Descripción ¶

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

95
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") ]]]]]] ) : mysqli

Abre una conexión al Servidor de MySQL que está en ejecución.

Parámetros ¶
host

Puede ser o un nombre de host o una dirección IP. Pasando el


valor NULL o la cadena "localhost" a este parámetro, se asumirá el host
local. Cuando es posible, se usarán tuberías en lugar del protocolo
TCP/IP.

Anteponer p: al host, abre una conexión


persistente. mysqli_change_user() es automáticamente 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
contraseña. Esto permite que un nombre de usuario ser usado con
diferentes permisos (dependiendo de si se proporciona una contraseña o
no).

dbname

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


cuando se realizan consultas.

port

Especifica el número al que intentar conectar al servidor de MySQL.

socket

Especifica el socket o la tubería con nombre que debería usarse.

Nota:
Especificar el parámetro socket no determinará explicitamente el
tipo de conexión a utilizar cuando se conecte al servidor MySQL.

96
El modo de realizar la conexión a la base de datos MySQL es
determinado por el parámetro host.

Valores devueltos ¶

Devuelve un objeto que representa la conexión al servidor MySQL.

Historial de cambios ¶

Versión Descripción
5.3.0 Se añadió la capacidad de conexiones persistentes.

Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli::__construct()

Estilo orientado a objetos

<?php
$mysqli = new mysqli('localhost', 'mi_usuario', 'mi_contraseña', 'mi_b
d');

/*
* 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 Conexión (' . $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 Conexión (' . 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, $contraseña, $bd) {
parent::__construct($host, $usuario, $contraseña, $bd);

if (mysqli_connect_error()) {
die('Error de Conexión (' . mysqli_connect_errno() . ') '

97
. mysqli_connect_error());
}
}
}

$bd = new foo_mysqli('localhost', 'mi_usuario', 'mi_contraseña', 'mi_b


d');

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

$bd->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect('localhost', 'mi_usuario', 'mi_contraseña', '
mi_bd');

if (!$enlace) {
die('Error de Conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

echo 'Éxito... ' . mysqli_get_host_info($enlace) . "\n";

mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

É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 envía en la autentificación/acuerdo que se produce
durante la conexión, 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 después de mysqli_init().

Nota:
Sólo para la sintaxis OO: Si una conexión falla se devuelve un objeto. Para
comprobar si la conexión falló, use la función mysqli_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
conexión, se debe utilizar mysqli_real_connect() en su lugar.
Nota:
Llamar al constructor sin parámetros es lo mismo que llamar a la
función mysqli_init().

98
Nota:
El error "Can't create TCP/IP socket (10106)" normalmente significa que la
directiva de configuración variables_order no contiene el carácter E. En
Windows, si el entorno no es copiado, la variable de entorno SYSTEMROOT no
estará disponible y PHP tendrá problemas al cargar Winsock.

Ver también ¶

 mysqli_real_connect() - Abre una conexión a un servidor mysql


 mysqli_options() - Establecer opciones
 mysqli_connect_errno() - Devuelve el código de error de la última
llamada
 mysqli_connect_error() - Devuelve una cadena con la descripción del
último error de conexión
 mysqli_close() - Cierra una conexión previamente abierta a una base de
datos

mysqli::debug
mysqli_debug
(PHP 5, PHP 7)

mysqli::debug -- mysqli_debug — Realiza operaciones de depuración

Descripción ¶

Estilo orientado a objetos

mysqli::debug ( string $message ) : bool

Estilo por procedimientos

mysqli_debug ( string $message ) : bool

Realiza operaciones de depuración usando la librería Fred Fish.

Parámetros ¶
message

Una cadena que representa la operación de depuración a realizar

Valores devueltos ¶

99
Devuelve TRUE.

Notas ¶

Nota:
Para usar la función mysqli_debug() debes compilar la librería del cliente
MySQL para que soporte depuración.

Ejemplos ¶

Ejemplo #1 Generando un fichero de prueba (traza)

<?php

/* Create a trace file in '/tmp/client.trace' on the local (client) ma


chine: */
mysqli_debug("d:t:o,/tmp/client.trace");

?>

Ver también ¶

 mysqli_dump_debug_info() - Volcado de información de depuración en


el registro
 mysqli_report() - Alias de mysqli_driver->report_mode

mysqli::dump_debug_info
mysqli_dump_debug_info
(PHP 5, PHP 7)

mysqli::dump_debug_info -- mysqli_dump_debug_info — Volcado de


información de depuración en el registro

Descripción ¶

Estilo orientado a objetos

mysqli::dump_debug_info ( void ) : bool

Estilo por procedimientos

mysqli_dump_debug_info ( mysqli $link ) : bool

100
Esta función está diseñada para ser ejecutada por un usuario con el privilegio
SUPER y se utiliza para volcar la información de depuración en el registro para
el servidor MySQL relacionado con la conexión.

Parámetros ¶
link

Sólo 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.

Ver también ¶

 mysqli_debug() - Realiza operaciones de depuración

mysqli::$errno
mysqli_errno
(PHP 5, PHP 7)

mysqli::$errno -- mysqli_errno — Devuelve el código del error de la última


función llamada

Descripción ¶

Estilo orientado a objetos

int $mysqli->errno;

Estilo por procedimientos

mysqli_errno ( mysqli $link ) : int

Devuelve el último código de error de la llamada más reciente a una función


MySQLi que podrá haberse ejecutado con éxito o haber fallado.

Los números de los errores de cliente, están indicados en el fichero de


cabecera errmsg.h, los números de mensajes de error del servidor están

101
indicados en mysqld_error.h. En la documentación de MySQL puedes
encontrar una lista de mensajes de error y su numeración en el
fichero Docs/mysqld_error.txt.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Un código de error de la última llamada, si ésta ha fallado. Si devuelve cero


significa que no ha ocurrido ningún error.

Ejemplos ¶

Ejemplo #1 Ejemplo de $mysqli->errno

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* comprobar la conexión */
if ($mysqli->connect_errno) {
printf("Falló la conexión: %s\n", $mysqli->connect_error);
exit();
}

if (!$mysqli->query("SET a=1")) {
printf("Código de error: %d\n", $mysqli->errno);
}

/* cerrar la conexión */
$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));
}

102
/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Errorcode: 1193

Ver también ¶

 mysqli_connect_errno() - Devuelve el código de error de la última


llamada
 mysqli_connect_error() - Devuelve una cadena con la descripción del
último error de conexión
 mysqli_error() - Devuelve una cadena que describe el último error
 mysqli_sqlstate() - Devuelve el error SQLSTATE de la operación de
MySQL previa

mysqli::$error_list
mysqli_error_list
(PHP 5 >= 5.4.0, PHP 7)

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


último comando ejecutado

Descripción ¶

Estilo orientado a objetos

array $mysqli->error_list;

Estilo por procedimientos

mysqli_error_list ( mysqli $link ) : array

Devuelve una array de errores de la llamada a la función de MySQLi más


reciente que puede tener éxito o no.

Parámetros ¶
link

103
Sólo 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 conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

if (!$mysqli->query("SET a=1")) {
print_r($mysqli->error_list);
}

/* cerrar la conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* verficar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

if (!mysqli_query($enlace, "SET a=1")) {


print_r(mysqli_error_list($enlace));
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Array
(
[0] => Array

104
(
[errno] => 1193
[sqlstate] => HY000
[error] => Unknown system variable 'a'
)

Ver también ¶

 mysqli_connect_errno() - Devuelve el código de error de la última


llamada
 mysqli_connect_error() - Devuelve una cadena con la descripción del
último error de conexión
 mysqli_error() - Devuelve una cadena que describe el último error
 mysqli_sqlstate() - Devuelve el error SQLSTATE de la operación de
MySQL previa

mysqli::$error
mysqli_error
(PHP 5, PHP 7)

mysqli::$error -- mysqli_error — Devuelve una cadena que describe el último


error

Descripción ¶

Estilo orientado a objetos

string $mysqli->error;

Estilo por procedimientos

mysqli_error ( mysqli $link ) : string

Devuelve el últmo mensaje de error para la llamada más reciente a una función
de MySQLi que puede haberse ejecutado correctamente o haber fallado.

Parámetros ¶
link

105
Sólo estilo por procediminetos: Un identificador de enlace devuelto
por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Una cadena que describe el error. Una cadena vacía 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 conexión */
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 conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

/* Comprueba la conexión */
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 conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Errormessage: Unknown system variable 'a'

Ver también ¶
106
 mysqli_connect_errno() - Devuelve el código de error de la última
llamada
 mysqli_connect_error() - Devuelve una cadena con la descripción del
último error de conexión
 mysqli_errno() - Devuelve el código del error de la última función llamada
 mysqli_sqlstate() - Devuelve el error SQLSTATE de la operación de
MySQL previa

mysqli::$field_count
mysqli_field_count
(PHP 5, PHP 7)

mysqli::$field_count -- mysqli_field_count — Devuelve el número de columnas


para la consulta más reciente

Descripción ¶

Estilo orientado a objetos

int $mysqli->field_count;

Estilo por procedimientos

mysqli_field_count ( mysqli $link ) : int

Devuelve el numero de columnas para la consulta más reciente en la conexión


representada por el parámetro link. Esta función puede ser útil cuando se
utiliza la función mysqli_store_result() para determinar si la consulta ha
producido un resultado no vacío o no, sin saber la naturaleza de la consulta.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Un entero que representa el número de campos en un set de resultado. An


integer representing the number of fields in a result set.

107
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, 'Ul


f')");

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 */

108
mysqli_close($link);
?>

mysqli::get_charset
mysqli_get_charset
(PHP 5 >= 5.1.0, PHP 7)

mysqli::get_charset -- mysqli_get_charset — Devuelve un objeto que contiene


el conjunto de caracteres

Descripción ¶

Estilo orientado a objetos

mysqli::get_charset ( void ) : object

Estilo por procedimientos

mysqli_get_charset ( mysqli $link ) : object

Devuelve un conjunto de caracteres objeto que proporciona varias propiedades


del conjunto de caracteres activo actual.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

La función devuelve un conjunto de caracteres objeto con las siguientes


propiedades:

charset

Nombre del conjunto de caracteres

collation

Nombre de la colación

dir

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

min_length

Tamaño mínimo de carácter en bytes

max_length

Tamaño máximo de carácter en bytes

number

Número 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(mysqli_get_charset($db));
?>

El resultado de los ejemplos sería:

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"]=>

110
int(801)
}

Ver también ¶

 mysqli_character_set_name() - Devuelve el juego de caracteres


predeterminado para la conexión a la base de datos
 mysqli_set_charset() - Establece el conjunto de caracteres
predeterminado del cliente

mysqli::get_client_info
mysqli_get_client_info
(PHP 5, PHP 7)

mysqli::get_client_info -- mysqli_get_client_info — Obtiene información de la


biblioteca cliente de MySQL

Descripción ¶

Estilo orientado a objetos

mysqli::get_client_info ( void ) : string

Estilo por procedimientos

mysqli_get_client_info ( mysqli $link ) : string

Devuelve una cadena que representa la versión de la biblioteca cliente MySQL.

Valores devueltos ¶

Una cadena que representa la versión de la biblioteca cliente de MySQL

Ejemplos ¶

Ejemplo #1 mysqli_get_client_info

<?php

/* No es necesaria una conexión para determinar


la versión de la biblioteca cliente MySQL */

printf("Versión de la biblioteca cliente: %s\n", mysqli_get_client_inf

111
o());
?>

Ver también ¶

 mysqli_get_client_version() - Devuelve la versión clientes de MySQL


como valor de tipo integer
 mysqli_get_server_info() - Devuelve la versión del servidor MySQL
 mysqli_get_server_version() - Devuelve la versión del servidor MySQL
como un valor entero

mysqli_get_client_version
mysqli::$client_version
(PHP 5, PHP 7)

mysqli_get_client_version -- mysqli::$client_version — Devuelve la versión


clientes de MySQL como valor de tipo integer

Descripción ¶

Estilo orientado a objetos

int $mysqli->client_version;

Estilo por procedimientos

mysqli_get_client_version ( mysqli $link ) : int

Devolver la versión de cliente como un valor entero.

Valores devueltos ¶

Un número que representa la versión de la librería 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 rápidamente la versión de la librería del cliente


para saber si alguna funcionalidad existe.

Ejemplos ¶

Ejemplo #1 mysqli_get_client_version

112
<?php

/* No se necesita una conexión para determinar


la versión de la librería del cliente */

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


?>

Ver también ¶

 mysqli_get_client_info() - Obtiene información de la biblioteca cliente de


MySQL
 mysqli_get_server_info() - Devuelve la versión del servidor MySQL
 mysqli_get_server_version() - Devuelve la versión del servidor MySQL
como un valor entero

mysqli::get_connection_stats
mysqli_get_connection_stats
(PHP 5 >= 5.3.0, PHP 7)

mysqli::get_connection_stats -- mysqli_get_connection_stats — Devuelve


estadísticas sobre la conexión del cliente

Descripción ¶

Estilo orientado a objetos

mysqli::get_connection_stats ( void ) : bool

Estilo por procedimientos

mysqli_get_connection_stats ( mysqli $link ) : array

Devuelve estadísticas sobre la conexión del cliente. Disponible sólo


con mysqlnd.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

113
Valores devueltos ¶

Devuelve un array con las estadísticas de la conexión 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 sería 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

114
[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

115
[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
)

Ver también ¶

 Stats description

mysqli::$host_info
mysqli_get_host_info
(PHP 5, PHP 7)

mysqli::$host_info -- mysqli_get_host_info — Devuelve una cadena que


representa el tipo de conexión usada

Descripción ¶

Estilo orientado a objetos

string $mysqli->host_info;

Estilo por procedimientos

mysqli_get_host_info ( mysqli $link ) : string

Devuelve una cadena que describiendo la conexión representada por el


parámetro link (incluyendo el nombre del servidor anfitrión).

Parámetros ¶

116
link

Sólo 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 anfitrión y el


tipo de conexión.

Ejemplos ¶

Ejemplo #1 Ejemplo de $mysqli->host_info

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar información del host */


printf("Host info: %s\n", $mysqli->host_info);

/* cerrar conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar información del host */


printf("Host info: %s\n", mysqli_get_host_info($link));

/* cerrar conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Host info: Localhost via UNIX socket

Ver también ¶
117
 mysqli_get_proto_info() - Devuelve la versión del protocolo MySQL
utilizada

mysqli::$protocol_version
mysqli_get_proto_info
(PHP 5, PHP 7)

mysqli::$protocol_version -- mysqli_get_proto_info — Devuelve la versión del


protocolo MySQL utilizada

Descripción ¶

Estilo orientado a objetos

string $mysqli->protocol_version;

Estilo por procedimientos

mysqli_get_proto_info ( mysqli $link ) : int

Devuelve un valor entero que que representa la versión del protocolo de


MySQL utilizada por la conexión representada por el parámetrolink.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Devuelve un valor entero que representa la versión del protocolo

Ejemplos ¶

Ejemplo #1 Ejemplo de $mysqli->protocol_version

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password");

118
/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar versión del protocolo */


printf("Protocol version: %d\n", $mysqli->protocol_version);

/* cerrar conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar versión del protocolo */


printf("Protocol version: %d\n", mysqli_get_proto_info($link));

/* cerrar conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Protocol version: 10

Ver también ¶

 mysqli_get_host_info() - Devuelve una cadena que representa el tipo de


conexión usada

mysqli::$server_info
mysqli::get_server_info
mysqli_get_server_info
(PHP 5, PHP 7)

119
mysqli::$server_info -- mysqli::get_server_info -
- mysqli_get_server_info — Devuelve la versión del servidor MySQL

Descripción ¶

Estilo orientado a objetos

string $mysqli->server_info;
mysqli_stmt::get_server_info ( void ) : string

Estilo por procedimientos

mysqli_get_server_info ( mysqli $link ) : string

Devuelve una cadena que representa la versión del servidor MySQL al que
está conectada la extensión MySQLi.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Una cadena de caracteres que representa la versión del servidor.

Ejemplos ¶

Ejemplo #1 Ejemplo de $mysqli->server_info

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password");

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar versión del servidor */


printf("Server version: %s\n", $mysqli->server_info);

/* cerrar conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar versión del servidor */


printf("Server version: %s\n", mysqli_get_server_info($link));

/* cerrar conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Server version: 4.1.2-alpha-debug

Ver también ¶

 mysqli_get_client_info() - Obtiene información de la biblioteca cliente de


MySQL
 mysqli_get_client_version() - Devuelve la versión clientes de MySQL
como valor de tipo integer
 mysqli_get_server_version() - Devuelve la versión del servidor MySQL
como un valor entero

mysqli::$server_info
mysqli::get_server_info
mysqli_get_server_info
(PHP 5, PHP 7)

mysqli::$server_info -- mysqli::get_server_info -
- mysqli_get_server_info — Devuelve la versión del servidor MySQL

Descripción ¶

Estilo orientado a objetos

string $mysqli->server_info;
mysqli_stmt::get_server_info ( void ) : string

121
Estilo por procedimientos

mysqli_get_server_info ( mysqli $link ) : string

Devuelve una cadena que representa la versión del servidor MySQL al que
está conectada la extensión MySQLi.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Una cadena de caracteres que representa la versión del servidor.

Ejemplos ¶

Ejemplo #1 Ejemplo de $mysqli->server_info

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password");

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar versión del servidor */


printf("Server version: %s\n", $mysqli->server_info);

/* cerrar conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

/* mostrar versión del servidor */


printf("Server version: %s\n", mysqli_get_server_info($link));

122
/* cerrar conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Server version: 4.1.2-alpha-debug


Ver también ¶

 mysqli_get_client_info() - Obtiene información de la biblioteca cliente de


MySQL
 mysqli_get_client_version() - Devuelve la versión clientes de MySQL como
valor de tipo integer
 mysqli_get_server_version() - Devuelve la versión del servidor MySQL como un
valor entero

mysqli::get_warnings
mysqli_get_warnings
(PHP 5 >= 5.1.0, PHP 7)

mysqli::get_warnings -- mysqli_get_warnings — Obtiene el resultado de SHOW


WARNINGS

Descripción ¶

Estilo orientado a objetos

mysqli::get_warnings ( void ) : mysqli_warning

Estilo por procedimientos

mysqli_get_warnings ( mysqli $link ) : mysqli_warning


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.

mysqli::$info

123
mysqli_info
(PHP 5, PHP 7)

mysqli::$info -- mysqli_info — Obtiene la información de la última consulta


ejecutada

Descripción ¶

Estilo orientado a objetos

string $mysqli->info;

Estilo por procedimientos

mysqli_info ( mysqli $link ) : string

La función mysqli_info() devuelve una cadena facilitando información 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 Warnings: 0

INSERT INTO...VALUES (...),(...),(...) Records: 3 Duplicates: 0 Warnings: 0

LOAD DATA INFILE ... Records: 1 Deleted: 0 Skipped: 0 Warnings: 0

ALTER TABLE ... Records: 3 Duplicates: 0 Warnings: 0

UPDATE ... Rows matched: 40 Changed: 40 Warnings: 0

Nota:
Las consultas que no estén incluidas en uno de los formatos anteriores no
están soportadas. En estas situaciones, mysqli_info() devolverá una cadena
vacía.
Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Una cadena de caracteres representando información adicional sobre la última


consulta ejecutrada.

124
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 LIM
IT 150");
printf("%s\n", mysqli_info($link));

/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Records: 150 Duplicates: 0 Warnings: 0

125
Ver también ¶

 mysqli_affected_rows() - Obtiene el número de filas afectadas en la última


operación MySQL
 mysqli_warning_count() - Devuelve el número de mensajes de advertencia de
la última consulta para un enlace dado
 mysqli_num_rows() - Obtiene el número de filas de un resultado

mysqli::init
mysqli_init
(PHP 5, PHP 7)

mysqli::init -- mysqli_init — Inicializa y devuelve un recurso para utilizarlo con


mysqli_real_connect()

Descripción ¶

Estilo orientado a objetos

mysqli::init ( void ) : mysqli

Estilo por procedimientos

mysqli_init ( void ) : mysqli

Asigna o inicializa un objecto MySQL adecuado


para mysqli_options() y mysqli_real_connect().

Nota:
Cualquier llamada a cualquier función de mysqli (excepto mysqli_options())
fallará hasta que mysqli_real_connect() sea llamada.
Valores devueltos ¶

Devuelve un objeto.

Ejemplos ¶

Veasé mysqli_real_connect().

Ver también ¶

 mysqli_options() - Establecer opciones

126
 mysqli_close() - Cierra una conexión previamente abierta a una base de datos
 mysqli_real_connect() - Abre una conexión a un servidor mysql
 mysqli_connect() - Alias de mysqli::__construct

mysqli::$insert_id
mysqli_insert_id
(PHP 5, PHP 7)

mysqli::$insert_id -- mysqli_insert_id — Devuelve el id autogenerado que se


utilizó en la última consulta

Descripción ¶

Estilo orientado a objetos

mixed $mysqli->insert_id;

Estilo por procedimientos

mysqli_insert_id ( mysqli $link ) : mixed

La función 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á función devolverá
cero.

Nota:
Realizar una sentencia INSERT o UPDATE usando la función
LAST_INSERT_ID() modificará el valor retornado por la
función mysqli_insert_id().
Parámetros ¶
link

Sólo 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 conexión o si la
consulta no actualiza un valor AUTO_INCREMENT.

127
Nota:
Si el número es mayor que el valor máximo 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 conexión: %s\n", mysqli_connect_error());
exit();
}

$mysqli->query("CREATE TABLE myCity LIKE City");

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttg


art', 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", "worl
d");

/* check connection */
if (mysqli_connect_errno()) {
printf("Error de conexión: %s\n", mysqli_connect_error());
exit();
}

mysqli_query($link, "CREATE TABLE myCity LIKE City");

$query = "INSERT INTO myCity VALUES (NULL, 'Stuttgart', 'DEU', 'Stuttg


art', 617000)";
mysqli_query($link, $query);

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

/* drop table */

128
mysqli_query($link, "DROP TABLE myCity");

/* close connection */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Nuevo registro con el id 1.

mysqli::kill
mysqli_kill
(PHP 5, PHP 7)

mysqli::kill -- mysqli_kill — Pide al servidor poner fin a un hilo de MySQL

Descripción ¶

Estilo orientado a objetos

mysqli::kill ( int $processid ) : bool

Estilo por procedimientos

mysqli_kill ( mysqli $link , int $processid ) : bool

Esta función se usa para pedir al servidor que ponga fin a un hilo MySQL
especificado por el parámetro processid. Este valor tiene que ser obtenido
llamando a la función mysqli_thread_id().

Para detener una consulta en ejecución debe usarse el comando SQL KILL
QUERY processid.

Parámetros ¶
link

Sólo 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.

129
Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli::kill()

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

/* determinar el id de nuestro hilo */


$thread_id = $mysqli->thread_id;

/* Poner fin a la conexión */


$mysqli->kill($thread_id);

/* Esto debería producir un error */


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

/* cerrar conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$link = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "wo
rld");

/* comprobar conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

/* determinar el id de nuestro hilo */


$thread_id = mysqli_thread_id($link);

/* Poner fin a la conexión */


mysqli_kill($link, $thread_id);

/* Esto debería producir un error */


if (!mysqli_query($link, "CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", mysqli_error($link));
exit;
}

130
/* cerrar conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Error: MySQL server has gone away


Ver también ¶

 mysqli_thread_id() - Deveulve el ID del hilo de la conexión actual

mysqli::more_results
mysqli_more_results
(PHP 5, PHP 7)

mysqli::more_results -- mysqli_more_results — Comprueba si hay más


resultados de una multi consulta

Descripción ¶

Estilo orientado a objetos

mysqli::more_results ( void ) : bool

Estilo por procedimientos

mysqli_more_results ( mysqli $link ) : bool

Indica si hay disponibles algún juego de resultados de alguna llamada previa


a mysqli_multi_query().

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Devuelve TRUE si uno o más conjuntos de resultados están disponibles desde


una llamada anterior a mysqli_multi_query(), o de lo contrario devuelve FALSE.

131
Ejemplos ¶

See mysqli_multi_query().

Ver también ¶

 mysqli_multi_query() - Realiza una consulta a la base de datos


 mysqli_next_result() - Prepara el siguiente resultado de multi_query
 mysqli_store_result() - Transfiere un conjunto de resultados de la última
consulta
 mysqli_use_result() - Inicia la recuperación de un conjunto de resultados

mysqli::multi_query
mysqli_multi_query
(PHP 5, PHP 7)

mysqli::multi_query -- mysqli_multi_query — Realiza una consulta a la base de


datos

Descripción ¶

Estilo orientado a objetos

mysqli::multi_query ( string $query ) : bool

Estilo por procedimientos

mysqli_multi_query ( mysqli $link , string $query ) : bool

Ejecuta una o múltiples 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().

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

query

132
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_contraseña", "worl
d");

/* comprobar conexión */
if (mysqli_connect_errno()) {
printf("Conexión 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 conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$link = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "wo
rld");

133
/* comprobar conexión */
if (mysqli_connect_errno()) {
printf("Conexión 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 conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería algo similar a:

my_user@localhost
-----------------
Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer
Ver también ¶

 mysqli_query() - Realiza una consulta a la base de datos


 mysqli_use_result() - Inicia la recuperación de un conjunto de resultados
 mysqli_store_result() - Transfiere un conjunto de resultados de la última
consulta
 mysqli_next_result() - Prepara el siguiente resultado de multi_query
 mysqli_more_results() - Comprueba si hay más resultados de una multi
consulta

mysqli::next_result
134
mysqli_next_result
(PHP 5, PHP 7)

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


multi_query

Descripción ¶

Estilo orientado a objetos

mysqli::next_result ( void ) : bool

Estilo por procedimientos

mysqli_next_result ( mysqli $link ) : bool

Prepara el siguiente juego de resultados de una llamada


a mysqli_multi_query() que puede obtenerse con mysqli_store_result() o
con mysqli_use_result().

Parámetros ¶
link

Sólo 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().

Ver también ¶

 mysqli_multi_query() - Realiza una consulta a la base de datos


 mysqli_more_results() - Comprueba si hay más resultados de una multi
consulta
 mysqli_store_result() - Transfiere un conjunto de resultados de la última
consulta
 mysqli_use_result() - Inicia la recuperación de un conjunto de resultados

135
mysqli::options
mysqli_options
(PHP 5, PHP 7)

mysqli::options -- mysqli_options — Establecer opciones

Descripción ¶

Estilo orientado a objetos

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

Estilo por procedimientos

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

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


una conexión.

Se puede llamar varias veces a esta función para establecer varias opciones.

mysqli_options() debería invocarse después de mysqli_init() y antes


de mysqli_real_connect().

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

opción

Opción que se desea establecer. Puede ser una de las siguientes.

Opciones válidas

Nombre Descripción
MYSQLI_OPT_CONNECT_TIMEOUT tiempo de expiración en segundos de la conexión
(soportado en Windows con TCP/IP desde PHP 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

136
Opciones válidas

Nombre Descripción
MYSQLI_READ_DEFAULT_FILE Leer las opciones del fichero nombrado de opciones
en lugar de my.cnf
MYSQLI_READ_DEFAULT_GROUP Leer opciones del grupo nombrado de my.cnf o del
fichero especificado
con MYSQL_READ_DEFAULT_FILE.
MYSQLI_SERVER_PUBLIC_KEY Fichero de clave pública RSA usado con la
autenticación basada en SHA-256.
MYSQLI_OPT_NET_CMD_BUFFER_SIZE El tamaño del búfer interno de órdenes/red. Solo
válido para mysqlnd.
MYSQLI_OPT_NET_READ_BUFFER_SIZE Tamaño de trozo de lectura máximo en bytes al leer
el cuerpo de un paquete de órdenes de MySQL. Solo
válido para mysqlnd.
MYSQLI_OPT_INT_AND_FLOAT_NATIVE Convertir columnas integer y float a números de
PHP. Únicamente válido para mysqlnd.
MYSQLI_OPT_SSL_VERIFY_SERVER_CERT

value

Valor de la opción.

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios ¶
Versión Descripción

5.5.0 Se añadieron las


opciones MYSQLI_SERVER_PUBLIC_KEY y MYSQLI_SERVER_PUBLIC_KEY.

5.3.0 Se añadierons las


opciones MYSQLI_OPT_INT_AND_FLOAT_NATIVE, MYSQLI_OPT_NET_CMD_BUFFER_
SIZE, MYSQLI_OPT_NET_READ_BUFFER_SIZE,
y MYSQLI_OPT_SSL_VERIFY_SERVER_CERT.

Ejemplos ¶

Vea mysqli_real_connect().

Notas ¶
Nota:

137
MySQLnd siempre utiliza el juego de caracteres de idioma predeterminado. El
juego de caracteres se envía en la autentificación/acuerdo que se produce
durante la conexión, 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 después de mysqli_init().

Ver también ¶

 mysqli_init() - Inicializa y devuelve un recurso para utilizarlo con


mysqli_real_connect()
 mysqli_real_connect() - Abre una conexión a un servidor mysql

mysqli::ping
mysqli_ping
(PHP 5, PHP 7)

mysqli::ping -- mysqli_ping — Comprueba la conexión al servidor, o trata de


reconectar si se perdió la conexión

Descripción ¶

Estilo orientado a objetos

mysqli::ping ( void ) : bool

Estilo por procedimientos

mysqli_ping ( mysqli $link ) : bool

Comprueba si la conexión al servidor funciona. Si se ha perdido, y la opción


global mysqli.reconnect está habilitada, se intenta realizar una reconexión
automática.

Esta función la pueden utilizar clientes que permanecen inactivos por mucho
tiempo para comprobar si el servidor ha cerrado la conexión y reconectar si
fuera necesario.

Parámetros ¶
link

138
Sólo 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_contraseña", "worl
d");

/* comprobar la conexión */
if ($mysqli->connect_errno) {
printf("Conexión fallida: %s\n", $mysqli->connect_error);
exit();
}

/* comprobar si el servidor sigue vivo */


if ($mysqli->ping()) {
printf ("¡La conexión está bien!\n");
} else {
printf ("Error: %s\n", $mysqli->error);
}

/* cerrar la conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

/* comprobar si el servidor sigue funcionando */


if (mysqli_ping($enlace)) {
printf ("¡La conexión está bien!\n");
} else {
printf ("Error: %s\n", mysqli_error($enlace));
}

/* cerrar la conexión */

139
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

¡La conexión está bien!

mysqli::poll
mysqli_poll
(PHP 5 >= 5.3.0, PHP 7)

mysqli::poll -- mysqli_poll — Almacena en caché conexiones

Descripción ¶

Estilo orientado a objetos

public static mysqli::poll ( array &$read , array &$error , array &$re


ject , int $sec [, int $usec ] ) : int

Estilo por procedimientos

mysqli_poll ( array &$read , array &$error , array &$reject , int $sec


[, int $usec ] ) : int

Almacena en caché conexiones. Disponible sólo con mysqlnd. Este método


puede usarse como estático.

Parámetros ¶
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 conexión perdida.

reject

Lista de conexiones rechazadas debido a que no se ha ejecutado


ninguna consulta asíncrona para la que la función podría almacenar en
caché resultados.

140
sec

El número de segundos a esperar, debe ser no negativo.

usec

El número de microsegundos a esperar, debe ser no negativo.

Valores devueltos ¶

Devuelve el número 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 sería:

Array
(
[0] => test
)
Ver también ¶

 mysqli_query() - Realiza una consulta a la base de datos


 mysqli_reap_async_query() - Obtener el resultado de una consulta asincrónica

141
mysqli::prepare
mysqli_prepare
(PHP 5, PHP 7)

mysqli::prepare -- mysqli_prepare — Prepara una sentencia SQL para su


ejecución

Descripción ¶

Estilo orientado a objetos

mysqli::prepare ( string $query ) : mysqli_stmt

Estilo por procedimientos

mysqli_prepare ( mysqli $link , string $query ) : mysqli_stmt

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 parámetros deben estar ligados a variables de aplicación


utilizando mysqli_stmt_bind_param() y/o mysqli_stmt_bind_result() antes de
ejecutar la sentencia u obtener las filas.

Parámetros ¶
link

Sólo 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 parámetro puede incluir uno o más marcadores de parámetros en


la sentencia SQL mediante la incorporación de caracteres de signo de
interrogación (?) en las posiciones correctas.

Nota:

142
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 comparación con una columna en una cláusula WHERE para
especificar un valor de comparación.

Sin embargo, no se les permite para identificadores (como nombres de


tabla o columna), en la lista de selección 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 restricción es necesaria debido a que sería imposible
determinar el tipo de parámetro. Tampoco está permitido comparar un
marcador con NULL mediante ? IS NULL. En general, los parámetros
son legales solamente en sentencias del Lenguaje de Manipulación de
Datos (DML) y no en sentencias del Lenguaje de Definición 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 conexión */
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 parámetros para marcadores */


$stmt->bind_param("s", $city);

/* ejecutar la consulta */
$stmt->execute();

/* ligar variables de resultado */


$stmt->bind_result($district);

/* obtener valor */
$stmt->fetch();

143
printf("%s is in district %s\n", $city, $district);

/* cerrar sentencia */
$stmt->close();
}

/* cerrar conexión */
$mysqli->close();
?>

Estilo por procedimientos

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

/* verificar conexión */
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 Nam
e=?")) {

/* ligar parámetros 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 conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Amersfoort is in district Utrecht

144
Ver también ¶

 mysqli_stmt_execute() - Ejecuta una consulta preparada


 mysqli_stmt_fetch() - Obtiene los resultados de una sentencia preparadas en
las variables vinculadas
 mysqli_stmt_bind_param() - Agrega variables a una sentencia preparada como
parámetros
 mysqli_stmt_bind_result() - Vincula variables a una sentencia preparada para el
almacenamiento de resultados
 mysqli_stmt_close() - Cierra una sentencia preparada

mysqli::query
mysqli_query
(PHP 5, PHP 7)

mysqli::query -- mysqli_query — Realiza una consulta a la base de datos

Descripción ¶

Estilo orientado a objetos

mysqli::query ( string $query [, int $resultmode =


MYSQLI_STORE_RESULT ] ) : mixed

Estilo por procedimientos

mysqli_query ( mysqli $link , string $query [, int $resultmode =


MYSQLI_STORE_RESULT ] ) : mixed

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
de mysqli_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 códigos de error retornados diferirán
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 código de error 1153. Este mensaje de
error significa que se tiene un paquete mayor
que max_allowed_packet bytes.

145
o mysqlnd en Windows retorna un código de error 2006. Este mensaje de
error significa que el servidor no está disponible.
o libmysqlclient en toda las plataformas retorna el código de error 2006.
Este mensaje de error significa que el servidor no está disponible.
Parámetros ¶
link

Sólo 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 deberían estar adecuadamente


escapados.

resultmode

La constante MYSQLI_USE_RESULT o MYSQLI_STORE_RESULT dependiendo


del compotamiento deseado. Por defecto, se usa la
constante MYSQLI_STORE_RESULT.

Si se usa MYSQLI_USE_RESULT todas la llamadas posteriores retornarán


con un error Commands out of sync a menos que se llame
a mysqli_free_result()

Con MYSQLI_ASYNC (disponible con mysqlnd), es posible hacer consulta


de manera asíncrona. 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
objeto mysqli_result. Para otras consultas exitosas
de mysqli_query() retornará TRUE.

Historial de cambios ¶
Versión Descripción

5.3.0 Se agregó la posibilidad de realizar consultas asíncronas.

Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli::query()

Estilo orientado a objetos

146
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* comprobar la conexión */
if ($mysqli->connect_errno) {
printf("Falló la conexión: %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 selección que devuelven un conjunto de resultados */


if ($resultado = $mysqli->query("SELECT Name FROM City LIMIT 10")) {
printf("La selección 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_U


SE_RESULT */
if ($resultado = $mysqli-
>query("SELECT * FROM City", MYSQLI_USE_RESULT)) {

/* Observar que no se puede ejecutar ninguna función que interactu


e con el
servidor hasta que el conjunto de resultados se haya cerrado. T
odas las llamadas devolverán 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 conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %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") ===

147
TRUE) {
printf("Se creó con éxtio la tabla myCity.\n");
}

/* Consultas de selección que devuelven un conjunto de resultados */


if ($resultado = mysqli_query($link, "SELECT Name FROM City LIMIT 10")
) {
printf("La selección devolvió %d filas.\n", mysqli_num_rows($resul
tado));

/* liberar el conjunto de resultados */


mysqli_free_result($resultado);
}

/* If we have to retrieve large amount of data we use MYSQLI_USE_RESUL


T */
if ($resultado = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_
RESULT)) {

/* Observar que no se puede ejecutar ninguna función que interactu


e con el
servidor hasta que el conjunto de resultados se haya cerrado. T
odas las llamadas devolverán 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 sería:

Se creó con éxtio la tabla myCity.


La selección devolvió 10 filas.
Error: Commands out of sync; You can't run this command now
Ver también ¶

 mysqli_real_query() - Ejecuta una consulta SQL


 mysqli_multi_query() - Realiza una consulta a la base de datos
 mysqli_free_result() - Libera la memoria asociada a un resultado

mysqli::real_connect
mysqli_real_connect
(PHP 5, PHP 7)

mysqli::real_connect -- mysqli_real_connect — Abre una conexión a un servidor


mysql

148
Descripción ¶

Estilo orientado a objetos

mysqli::real_connect ([ string $host [, string $username [, string $pa


sswd [, string $dbname [, int $port [, string $socket [, int $flags ]]
]]]]] ) : bool

Estilo por procedimientos

mysqli_real_connect ( mysqli $link [, string $host [, string $username


[, string $passwd [, string $dbname [, int $port [, string $socket [,
int $flags ]]]]]]] ) : bool

Establece una conexión a un motor de bases de datos MySQL.

Esta función difiere de mysqli_connect() en:

o mysqli_real_connect() necesita un objeto válido que haya sido creado


por la función mysqli_init().
o Con la función mysqli_options() se pueden establecer varias opciones de
conexión.
o Existe un parámetro flags.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

host

Puede ser un nombre de host o una dirección IP. Si se pasa el


valor NULL o la cadena "localhost" a este parámetro, se asume el host
local. Cuando sea posible se usarán tuberías 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
contraseña. Esto permite a un nombre de usuario que sea usado con
diferentes permisos (dependiendo de si se proporciona una contraseña o
no).

dbname

149
Si se proporciona, especificará la base de datos predeterminada a ser
usada para realizar consultas.

port

Especifica el número de puerto con el que intentar conectarse al servidor


MySQL.

socket

Especifica el socket o la tubería con nombre que debería usarse.

Nota:
Especificar el parámetro socket no determinará explícitamente el tipo de
conexión a usar al conectarse al servidor MySQL. El modo de realizar la
conexión a la base de datos de MySQL está determinado por el
parámetro host.
flags

Con el parámetro flags se pueden establecer diferentes opciones de


conexión:

Banderas soportadas

Nobre Descripción
MYSQLI_CLIENT_COMPRESS Usar el protocolo de compresión
MYSQLI_CLIENT_FOUND_ROWS Devolver el número de filas coincidentes, no el núm
MYSQLI_CLIENT_IGNORE_SPACE Permitir espacios después de los nombres de funcio
los nombres de funciones sean palabras reservadas
MYSQLI_CLIENT_INTERACTIVE Permite interactive_timeout segundos (en vez de w
de inactividad antes de cerrar la conexión
MYSQLI_CLIENT_SSL Usar SSL (encriptación)
MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT Igual que MYSQLI_CLIENT_SSL, pero deshabilita l
certificado SSL proporcionado. Esto solamente es p
usan el Controlador Nativo de MySQL y MySQL 5.6

Nota:
Por razones de seguridad la bandera MULTI_STATEMENT no está
soportada en PHP. Si quiere ejecutar múltiples consultas use la
función mysqli_multi_query().
Historial de cambios ¶
Versión Descripción

5.6.16 Se añadió la bandera MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT para el Controlador Nativo d

150
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 configuración de MYSQLI_INIT_COMMAND');
}

if (!$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Falló la configuración de MYSQLI_OPT_CONNECT_TIMEOUT');
}

if (!$mysqli-
>real_connect('localhost', 'mi_usuario', 'mi_contraseña', 'mi_bd')) {
die('Error de conexión (' . 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, $contraseña, $bd) {
parent::init();

if (!parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0'


)) {
die('Falló la configuración de MYSQLI_INIT_COMMAND');
}

if (!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('Falló la configuración de MYSQLI_OPT_CONNECT_TIMEOUT'
);
}

if (!parent::real_connect($host, $usuario, $contraseña, $bd))

151
{
die('Error de conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}

$bd = new foo_mysqli('localhost', 'mi_usuario', 'mi_contraseña', 'mi_b


d');

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 configuración de MYSQLI_INIT_COMMAND');
}

if (!mysqli_options($enlace, MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {


die('Falló la configuración de MYSQLI_OPT_CONNECT_TIMEOUT');
}

if (!mysqli_real_connect($enlace, 'localhost', 'mi_usuario', 'mi_contr


aseña', 'mi_bd')) {
die('Error de conexión (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}

echo 'Éxito... ' . mysqli_get_host_info($enlace) . "\n";

mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

É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 envía en la autentificación/acuerdo que se produce
durante la conexión, que utilizará mysqlnd.

152
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 después de mysqli_init().

Ver también ¶

 mysqli_connect() - Alias de mysqli::__construct


 mysqli_init() - Inicializa y devuelve un recurso para utilizarlo con
mysqli_real_connect()
 mysqli_options() - Establecer opciones
 mysqli_ssl_set() - Usada para establece conexiones seguras usando SSL
 mysqli_close() - Cierra una conexión previamente abierta a una base de datos

mysqli::real_escape_string
mysqli_real_escape_string
(PHP 5, PHP 7)

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 conexión

Descripción ¶

Estilo orientado a objetos

mysqli::escape_string ( string $escapestr ) : string

mysqli::real_escape_string ( string $escapestr ) : string

Estilo por procedimientos

mysqli_real_escape_string ( mysqli $link , string $escapestr )


: string

Esta función 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 conexión.

Precaución

153
Seguridad: el conjunto de caracteres
predeterminado
El conjunto de caracteres debe ser establecido a nivel del servidor, o con la
función mysqli_set_charset() de la API para que afecte
a mysqli_real_escape_string(). Véase la sección de conceptos sobre conjuntos
de caracteres para más información.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

escapestr

La cadena a escapar.

Los caracteres codificados 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_contraseña", "worl
d");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %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);

154
/* 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_contraseña", "
world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %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 ('$ciud
ad')")) {
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 ('$ciuda
d')")) {
printf("%d fila insertada.\n", mysqli_affected_rows($enlace));
}

mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Error: 42000
1 fila insertada.
Notas ¶
Nota:
Para quienes estén acostumbrados a usar mysql_real_escape_string(), se ha
de observar que el argumento de mysqli_real_escape_string() difiere de lo que
espera mysql_real_escape_string(). El identificador enlace va primero
en mysqli_real_escape_string(), mientras que la cadena a escapar va primero
en mysql_real_escape_string().

155
Ver también ¶

 mysqli_set_charset() - Establece el conjunto de caracteres predeterminado del


cliente
 mysqli_character_set_name() - Devuelve el juego de caracteres
predeterminado para la conexión a la base de datos

mysqli::real_query
mysqli_real_query
(PHP 5, PHP 7)

mysqli::real_query -- mysqli_real_query — Ejecuta una consulta SQL

Descripción ¶

Estilo orientado a objetos

mysqli::real_query ( string $query ) : bool

Estilo por procedimientos

mysqli_real_query ( mysqli $link , string $query ) : bool

Ejecuta una sola consulta contra la base de datos cuyo resultado puede ser
recuperado o almacenado mediante las
funciones mysqli_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().

Parámetros ¶
link

Sólo 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.

156
Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también ¶

 mysqli_query() - Realiza una consulta a la base de datos


 mysqli_store_result() - Transfiere un conjunto de resultados de la última
consulta
 mysqli_use_result() - Inicia la recuperación de un conjunto de resultados

mysqli::reap_async_query
mysqli_reap_async_query
(PHP 5 >= 5.3.0, PHP 7)

mysqli::reap_async_query -- mysqli_reap_async_query — Obtener el resultado


de una consulta asincrónica

Descripción ¶

Estilo orientado a objetos

public mysqli::reap_async_query ( void ) : mysqli_result

Estilo por procedimientos

mysqli_reap_async_query ( mysqli $link ) : mysqli_result

Obtiene el resultado de una consulta asincrónica. Disponible sólo con mysqlnd.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Devuelve un objeto mysqli_result en caso de éxito, FALSE en caso contrario.

157
Ver también ¶

 mysqli_poll() - Almacena en caché conexiones

mysqli::refresh
mysqli_refresh
(PHP 5 >= 5.3.0, PHP 7)

mysqli::refresh -- mysqli_refresh — Refresca

Descripción ¶

Estilo orientado a objetos

public mysqli::refresh ( int $options ) : bool

Estilo por procedimientos

mysqli_refresh ( resource $link , int $options ) : bool

Vacía las tablas o caches, o restablece la información de replicación de


servidores.

Parámetros ¶
link

Sólo 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 también la documentiación oficial de » MySQL Refresh

Valores devueltos ¶

TRUE si el refresh fue exitoso, FALSE en caso contrario.

158
Ver también ¶

 mysqli_poll() - Almacena en caché conexiones

mysqli::release_savepoint
mysqli_release_savepoint
(PHP 5 >= 5.5.0, PHP 7)

mysqli::release_savepoint -- mysqli_release_savepoint — Elimina el punto


salvado con nombre del conjunto de puntos salvados de la transacción actual

Descripción ¶

Estilo orientado a objetos (method):

public mysqli::release_savepoint ( string $name ) : bool

Estilo por procedimientos:

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


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Parámetros ¶
link

Sólo 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.

Ver también ¶

 mysqli_rollback() - Revierte la transacción actual

159
mysqli::rollback
mysqli_rollback
(PHP 5, PHP 7)

mysqli::rollback -- mysqli_rollback — Revierte la transacción actual

Descripción ¶

Estilo orientado a objetos

mysqli::rollback ([ int $flags [, string $name ]] ) : bool

Estilo por procedimientos

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


: bool

Revierte la transacción actual de la base de datos.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

flags

Una máscara 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 ¶

Versión Descripción
5.5.0 Se añadieron los parámetros flags y name.

Ejemplos ¶

160
Ejemplo #1 Ejemplo de mysqli::rollback()

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* verificar la conexión */
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 conexión */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

161
/* 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 sería:

0 rows in table myCity.


50 rows in table myCity (after rollback).

Ver también ¶

 mysqli_begin_transaction() - Inicia una transacción


 mysqli_commit() - Consigna la transacción actual
 mysqli_autocommit() - Activa o desactiva las modificaciones de la base
de datos autoconsignadas
 mysqli_release_savepoint() - Elimina el punto salvado con nombre del
conjunto de puntos salvados de la transacción actual

mysqli::rpl_query_type
162
mysqli_rpl_query_type
(PHP 5, PHP 7)

mysqli::rpl_query_type -- mysqli_rpl_query_type — Devuelve un tipo de


consulta RPL

Descripción ¶

Estilo orientado a objetos

mysqli::rpl_query_type ( string $query ) : int

Estilo por procedimientos

mysqli_rpl_query_type ( mysqli $link , string $query ) : int

Devuelve MYSQLI_RPL_MASTER, MYSQLI_RPL_SLAVE o MYSQLI_RPL_ADMIN dependie


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

Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli::savepoint
mysqli_savepoint
(PHP 5 >= 5.5.0, PHP 7)

mysqli::savepoint -- mysqli_savepoint — Define el nombre de un punto de


salvaguarda de la transacción

Descripción ¶

Estilo orientado a objetos (method):

public mysqli::savepoint ( string $name ) : bool

Estilo por procedimientos:

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

163
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Parámetros ¶
link

Sólo 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.

Ver también ¶

 mysqli_commit() - Consigna la transacción actual

mysqli::select_db
mysqli_select_db
(PHP 5, PHP 7)

mysqli::select_db -- mysqli_select_db — Selecciona la base de datos por


defecto para realizar las consultas

Descripción ¶

Estilo orientado a objetos

mysqli::select_db ( string $dbname ) : bool

Estilo por procedimientos

mysqli_select_db ( mysqli $link , string $dbname ) : bool

Selecciona la base de datos por defecto que se utilizará para realizar las
consultas, en la conexión activa.

Nota:

164
Esta función debería ser usada solo para cambiar la base de datos por defecto
para la conexión. Se puede seleccionar la base de datos por defecto en el
cuarto parámetro de la función mysqli_connect().
Parámetros ¶
link

Sólo 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 conexión */
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

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

/* comprueba la conexión */
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 sería:

Default database is test.


Default database is world.
Ver también ¶

 mysqli_connect() - Alias de mysqli::__construct


 mysqli_real_connect() - Abre una conexión a un servidor mysql

166
mysqli::send_query
mysqli_send_query
(PHP 5, PHP 7)

mysqli::send_query -- mysqli_send_query — Enviar una consulta y devolver

Descripción ¶

Estilo orientado a objetos

mysqli::send_query ( string $query ) : bool

Estilo por procedimientos

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


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli::set_charset
mysqli_set_charset
(PHP 5 >= 5.0.5, PHP 7)

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


caracteres predeterminado del cliente

Descripción ¶

Estilo orientado a objetos

mysqli::set_charset ( string $charset ) : bool

Estilo por procedimientos

mysqli_set_charset ( mysqli $link , string $charset ) : bool

167
Establece el conjunto de caracteres predeterminado a usar cuando se envían
datos desde y hacia el servidor de la base de datos.

Parámetros ¶
link

Sólo 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 función 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). Véase la
sección Conceptos del conjunto de caracteres de MySQL para más
información.
Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli::set_charset()

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "test
");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

printf("Conjunto de caracteres inicial: %s\n", $mysqli-


>character_set_name());

/* cambiar el conjunto de caracteres a utf8 */


if (!$mysqli->set_charset("utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", $mys
qli->error);
exit();
} else {

168
printf("Conjunto de caracteres actual: %s\n", $mysqli-
>character_set_name());
}

$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect('localhost', 'mi_usuario', 'mi_contraseña', '
test');

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

printf("Conjunto de caracteres inicial: %s\n", mysqli_character_set_na


me($enlace));

/* cambiar el conjunto de caracteres a utf8 */


if (!mysqli_set_charset($enlace, "utf8")) {
printf("Error cargando el conjunto de caracteres utf8: %s\n", mysq
li_error($enlace));
exit();
} else {
printf("Conjunto de caracteres actual: %s\n", mysqli_character_set
_name($enlace));
}

mysqli_close($enlace);
?>

El resultado de los ejemplos sería algo similar a:

Conjunto de caracteres inicial: latin1


Conjunto de caracteres actual: utf8
Ver también ¶

 mysqli_character_set_name() - Devuelve el juego de caracteres


predeterminado para la conexión a la base de datos
 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 conexión
 Conceptos sobre conjuntos de caracteres de MySQL
 » Listado de los conjuntos de caracteres admitidos por MySQL

mysqli::set_local_infile_default
169
mysqli_set_local_infile_default
(PHP 5, PHP 7)

mysqli::set_local_infile_default -
- mysqli_set_local_infile_default — Desestablece el gestor definido por el
usuario para un comando load local infile

Descripción ¶
mysqli_set_local_infile_default ( mysqli $link ) : void

Desactiva un gestor LOAD DATA INFILE LOCAL previamente establecido


con mysqli_set_local_infile_handler().

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

No devuelve ningún valor.

Ejemplos ¶

Véase el ejemplo de mysqli_set_local_infile_handler()

Ver también ¶

 mysqli_set_local_infile_handler() - Establecer la llamada de retorno para el


comando LOAD DATA LOCAL INFILE

mysqli::set_local_infile_handler
mysqli_set_local_infile_handler
(PHP 5, PHP 7)

mysqli::set_local_infile_handler -- mysqli_set_local_infile_handler — Establecer


la llamada de retorno para el comando LOAD DATA LOCAL INFILE

Descripción ¶

Estilo orientado a objetos

170
mysqli::set_local_infile_handler ( mysqli $link , callable $read_func
) : bool

Estilo por procedimientos

mysqli_set_local_infile_handler ( mysqli $link , callable $read_func )


: bool

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

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

read_func

Una llamada de retorno o un método de un objeto que toma los


siguientes parámetros:

stream

Un flujo de PHP asociado con los comandos INFILE de SQL

&buffer

Un buffer de cadena donde almacenar la entrada reescrita

buflen

El número máximo de caracteres a almacenar en el buffer

&errormsg

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

La llamada de retorno debería devolver el número 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.

171
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 mayúsculas 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 mayúsculas y reemplazar el delimitador "," con [TAB


]
$buffer = strtoupper(str_replace(",", "\t", $buffer));

return strlen($buffer);
}

172
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 sería:

Entrada:
23,foo
42,bar

Resultado:
23,FOO
42,BAR
Ver también ¶

 mysqli_set_local_infile_default() - Desestablece el gestor definido por el usuario


para un comando load local infile

mysqli::$sqlstate
mysqli_sqlstate
(PHP 5, PHP 7)

mysqli::$sqlstate -- mysqli_sqlstate — Devuelve el error SQLSTATE de la


operación de MySQL previa

Descripción ¶

Estilo orientado a objetos

string $mysqli->sqlstate;

173
Estilo por procedimientos

mysqli_sqlstate ( mysqli $link ) : string

Devuelve una cadena que contiene el código de error SQLSTATE del último
error. El código 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, véase » http://dev.mysql.com/doc/mysql/en/error-
handling.html.

Nota:
Observe que no todos los errores de MySQL están aún referenciados a
SQLSTATE. El valor HY000 (error general error) se utiliza para error no
referenciados.
Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Devuelve una cadena que contiene el código de error SQLSTATE del último
error. El código 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_contraseña", "worl
d");

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

/* La tabla City ya existe, por lo que deberíamos 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

174
<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

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

/* La tabla City ya existe, por lo que deberíamos 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 sería:

Error - SQLSTATE 42S01.


Ver también ¶

 mysqli_errno() - Devuelve el código del error de la última función llamada


 mysqli_error() - Devuelve una cadena que describe el último error

mysqli::ssl_set
mysqli_ssl_set
(PHP 5, PHP 7)

mysqli::ssl_set -- mysqli_ssl_set — Usada para establece conexiones seguras


usando SSL

Descripción ¶

Estilo orientado a objetos

mysqli::ssl_set ( string $key , string $cert , string $ca , string $ca


path , string $cipher ) : bool

Estilo por procedimientos

175
mysqli_ssl_set ( mysqli $link , string $key , string $cert , string $c
a , string $capath , string $cipher ) : bool

Usada para establece conexiones seguras usando SSL. Se debe llamar antes
a mysqli_real_connect(). Esta función 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 función 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 versión 5.3
de PHP en adelante.

Parámetros ¶
link

Sólo 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 encriptación SSL.

Cualquier parámetro SSL sin usar puede darse como NULL

Valores devueltos ¶

Esta función siempres devuelve el valor TRUE. Si la configuración de SSL no es


correcta, mysqli_real_connect() devolverá un error al intentar conectarse.

Ver también ¶

 mysqli_options() - Establecer opciones

176
 mysqli_real_connect() - Abre una conexión a un servidor mysql

mysqli::stat
mysqli_stat
(PHP 5, PHP 7)

mysqli::stat -- mysqli_stat — Obtiene el estado actual del sistema

Descripción ¶

Estilo orientado a objetos

mysqli::stat ( void ) : string

Estilo por procedimientos

mysqli_stat ( mysqli $link ) : string

mysqli_stat() devuelve una cadena que contiene información similar a la


proporcionada por el comando 'mysqladmin status'. Incluye el tiempo en
funcionamiento en segundos y el número de hilos en ejecución, de preguntas,
de recargas y de tablas abiertas.

Parámetros ¶
link

Sólo 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_contraseña", "worl
d");

177
/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %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_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

printf("Estado del sistema: %s\n", mysqli_stat($enlace));

mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

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
Ver también ¶

 mysqli_get_server_info() - Devuelve la versión del servidor MySQL

mysqli::stmt_init
mysqli_stmt_init
(PHP 5, PHP 7)

mysqli::stmt_init -- mysqli_stmt_init — Inicializa una sentencia y devuelve un


objeto para usarlo con mysqli_stmt_prepare

178
Descripción ¶

Estilo orientado a objetos

mysqli::stmt_init ( void ) : mysqli_stmt

Estilo por procedimientos

mysqli_stmt_init ( mysqli $link ) : mysqli_stmt

Asigna e inicializa un objeto de sentencia apropiado


para mysqli_stmt_prepare().

Nota:
Cualquier llamada subsiguiente a cualquier función de mysqli_stmt fallará a
menos que se llame antes a mysqli_stmt_prepare().
Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Returns an object.

Ver también ¶

 mysqli_stmt_prepare() - Preparar una sentencia SQL para su ejecución

mysqli::store_result
mysqli_store_result
(PHP 5, PHP 7)

mysqli::store_result -- mysqli_store_result — Transfiere un conjunto de


resultados de la última consulta

Descripción ¶

Estilo orientado a objetos

179
mysqli::store_result ([ int $option ] ) : mysqli_result

Estilo por procedimientos

mysqli_store_result ( mysqli $link [, int $option ] ) : mysqli_result

Transfiere el conjunto de resultados de la última consulta de la conexión a la


base de datos representada por el parámetro link a ser usado con la
función mysqli_data_seek().

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

option

La opción a establecer. Puede ser uno de los siguientes valores:

Opciones válidas

Nombre Descripción
MYSQLI_STORE_RESULT_COPY_DATA Copiar los resultados desde el búfer interno de mysqlnd a
variables de PHP. Por defecto, mysqlnd usará un lógica de
referencia para evitar copiar y duplicar resultados
contenidos en memoria. Para ciertos conjuntos de
resultados con filas muy pequeñas, por ejemplo, la
estrategia de copia puede reducir el uso total de memoria
debido a que las variables de PHP de contienen resultados
podrían ser liberadas antes (disponible con mysqlnd
solamente, desde PHP 5.6.0)

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 función también devuelve FALSE si la lectura del conjunto de
resultados falla. Se puede comprobar si se ha obtenido un error comprobando
si mysqli_error() no devuelve una cadena vacía, si mysqli_errno() devuelve un
valor distinto de cero, o si mysqli_field_count() devuelve un valor distinto de
cero. Otra posible razón para que esta función devuelva FALSE después de una
llamada con éxito a mysqli_query() puede ser un conjunto de resultados
demasiado grande (no es posible asignarle memoria).

180
Si mysqli_field_count() devuelve un valor distinto de cero, la sentencia debería
haber producido un conjunto de resultados no vacío.
Notas ¶
Nota:
Aunque es una buena práctica liberar la memoria usada por los resultados de
una consulta usando la función mysqli_free_result(), al transferir conjuntos de
resultados grandes usando la función mysqli_store_result() esto se convierte en
particularmente importante.
Ejemplos ¶

Véase mysqli_multi_query().

Ver también ¶

 mysqli_real_query() - Ejecuta una consulta SQL


 mysqli_use_result() - Inicia la recuperación de un conjunto de resultados

mysqli::$thread_id
mysqli_thread_id
(PHP 5, PHP 7)

mysqli::$thread_id -- mysqli_thread_id — Deveulve el ID del hilo de la conexión


actual

Descripción ¶

Estilo orientado a objetos

int $mysqli->thread_id;

Estilo por procedimientos

mysqli_thread_id ( mysqli $link ) : int

La función mysqli_thread_id() devuelve el ID del hilo de la conexión actual, el


cual puede ser destruido usando la función mysqli_kill(). Si se pierde la
conexión y se reconecta con mysqli_ping(), el ID del hilo será otro. Por lo tanto
se debería obtener el ID del hilo únicamente cuando se necesite.

Nota:
El ID del hilo es asignado basándose en una conexión-por-conexión. Por lo
tanto, si la conexión se pierde y se restablece se asignará un nuevo ID de hio.

181
Para destruir una consulta en ejecución se puede usar el comando SQL KILL
QUERY id_proceso.

Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

Valores devueltos ¶

Devuelve el ID del hilo de la conexión actual.

Ejemplos ¶

Ejemplo #1 Ejemplo $mysqli->thread_id

Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

/* determinar el id del hilo */


$id_hilo = $mysqli->thread_id;

/* Destruir la conexión */
$mysqli->kill($id_hilo);

/* Esto debería producir un error */


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

/* cerrar la conexión */
$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());

182
exit();
}

/* determinar el id del hilo */


$id_hilo = mysqli_thread_id($enlace);

/* Destruir la conexión */
mysqli_kill($enlace, $id_hilo);

/* Esto debería producir un error */


if (!mysqli_query($enlace, "CREATE TABLE myCity LIKE City")) {
printf("Error: %s\n", mysqli_error($enlace));
exit;
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Error: MySQL server has gone away


Ver también ¶

 mysqli_kill() - Pide al servidor poner fin a un hilo de MySQL

mysqli::thread_safe
mysqli_thread_safe
(PHP 5, PHP 7)

mysqli::thread_safe -- mysqli_thread_safe — Devuelve si la seguridad a nivel


de hilos está dada o no

Descripción ¶

Estilo por procedimientos

mysqli_thread_safe ( void ) : bool

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.

183
mysqli::use_result
mysqli_use_result
(PHP 5, PHP 7)

mysqli::use_result -- mysqli_use_result — Inicia la recuperación de un conjunto


de resultados

Descripción ¶

Estilo orientado a objetos

mysqli::use_result ( void ) : mysqli_result

Estilo por procedimientos

mysqli_use_result ( mysqli $link ) : mysqli_result

Usada par iniciar la recuperación de un conjunto de resultados de la última


consulta ejecutada usando la función mysqli_real_query() sobre la conexión a
la base de datos.

Se debe llamar a esta función 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 conexión a la base
de datos.

Nota:
La función 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 debería 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 están
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

184
<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* Comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %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_contraseña", "
world");

/* Comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %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]);

185
}
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 sería:

mi_usuario@localhost
-----------------
Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer
Ver también ¶

 mysqli_real_query() - Ejecuta una consulta SQL


 mysqli_store_result() - Transfiere un conjunto de resultados de la última
consulta

mysqli::$warning_count
mysqli_warning_count
(PHP 5, PHP 7)

mysqli::$warning_count -- mysqli_warning_count — Devuelve el número de


mensajes de advertencia de la última consulta para un enlace dado

Descripción ¶

Estilo orientado a objetos

int $mysqli->warning_count;

Estilo por procedimientos

mysqli_warning_count ( mysqli $link ) : int

186
Devuelve el número de mensajes de advertencia de la última consulta en la
conexión a la base de datos.

Nota:
Para recuperar los mensajes de advertencia que puede utilizar el comando
SQL SHOW WARNINGS [limit row_count].
Parámetros ¶
link

Sólo 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();
?>

187
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 sería:

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


Ver también ¶

 mysqli_errno() - Devuelve el código del error de la última función llamada


 mysqli_error() - Devuelve una cadena que describe el último error
 mysqli_sqlstate() - Devuelve el error SQLSTATE de la operación de MySQL
previa

188
La clase mysqli_stmt ¶
(PHP 5, PHP 7)
Introducción ¶

Representa una consulta preparada.

Sinopsis de la Clase ¶
mysqli_stmt {
/* Propiedades */
int $affected_rows;
int $errno;
array $error_list;
string $error;
int $field_count;
int $insert_id;
int $num_rows;
int $param_count;
string $sqlstate;
/* Métodos */
__construct ( mysqli $link [, string $query ] )

attr_get ( int $attr ) : int

attr_set ( int $attr , int $mode ) : bool

bind_param ( string $types , mixed &$var1 [, mixed &$... ] ) : bool

bind_result ( mixed &$var1 [, mixed &$... ] ) : bool


close ( void ) : bool
data_seek ( int $offset ) : void
execute ( void ) : bool
fetch ( void ) : bool
free_result ( void ) : void
get_result ( void ) : mysqli_result
get_warnings ( mysqli_stmt $stmt ) : object

prepare ( string $query ) : mixed


reset ( void ) : bool

189
result_metadata ( void ) : mysqli_result
send_long_data ( int $param_nr , string $data ) : bool
store_result ( void ) : bool
}

Tabla de contenidos ¶

 mysqli_stmt::$affected_rows — Devuelve el número total de filas cambiadas,


borradas, o insertadas por la última sentencia ejecutada
 mysqli_stmt::attr_get — Se utiliza para obtener el valor actual de un atributo de
la sentencia
 mysqli_stmt::attr_set — Se utiliza para modificar el comportamiento de una
sentencia preparada
 mysqli_stmt::bind_param — Agrega variables a una sentencia preparada como
parámetros
 mysqli_stmt::bind_result — Vincula variables a una sentencia preparada para el
almacenamiento de resultados
 mysqli_stmt::close — Cierra una sentencia preparada
 mysqli_stmt::__construct — Construye un nuevo objeto mysqli_stmt
 mysqli_stmt::data_seek — Busca una fila arbitraria en un conjunto de
resultados de una sentencia
 mysqli_stmt::$errno — Devuelve el código de error de la llamada de la
sentencia más reciente
 mysqli_stmt::$error_list — Devuelve una lista de errores de la última sentencia
ejecutada
 mysqli_stmt::$error — Devuelve una descripción en forma de string del último
error de una sentencia
 mysqli_stmt::execute — Ejecuta una consulta preparada
 mysqli_stmt::fetch — Obtiene los resultados de una sentencia preparadas en
las variables vinculadas
 mysqli_stmt::$field_count — Devuelve el número de campos de la sentencia
dada
 mysqli_stmt::free_result — Libera la memoria de los resultados almacenados
del gestor de sentencia dado
 mysqli_stmt::get_result — Obtiene un conjunto de resultados de una sentencia
preparada
 mysqli_stmt::get_warnings — Obtener los resultados de SHOW WARNINGS
 mysqli_stmt::$insert_id — Obtener el ID generado en la operación INSERT
anterior
 mysqli_stmt::more_results — Comprobar si existen más resultados de una
consulta de consultas múltiples
 mysqli_stmt::next_result — Lee el siguiente resultado de una consulta múltiple
 mysqli_stmt::$num_rows — Devuelve el número de filas de un conjunto de
resultados de una sentencia
 mysqli_stmt::$param_count — Devuelve el número de parámetros de la
sentencia dada
 mysqli_stmt::prepare — Preparar una sentencia SQL para su ejecución
 mysqli_stmt::reset — Reinicia una sentencia preparada
 mysqli_stmt::result_metadata — Devuelve los metadatos del conjunto de
resultados de una sentencia preparada
 mysqli_stmt::send_long_data — Enviar datos en bloques
 mysqli_stmt::$sqlstate — Devuelve el error SQLSTATE de la operación de
sentencia previa

190
 mysqli_stmt::store_result — Transfiere un conjunto de resultados desde una
sentencia preparada

mysqli_stmt::$affected_rows
mysqli_stmt_affected_rows
(PHP 5, PHP 7)

mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rows — Devuelve el


número total de filas cambiadas, borradas, o insertadas por la última sentencia
ejecutada

Descripción ¶

Estilo orientado a objetos

int $mysqli_stmt->affected_rows;

Estilo por procedimientos

mysqli_stmt_affected_rows ( mysqli_stmt $stmt ) : int

Devuelve el número de filas afectadas por una consulta INSERT, UPDATE,


o DELETE.

Esta función sólo funciona con las consultas que actualizan una tabla. Con el
fin de obtener el número de filas de una consulta SELECT,
usar mysqli_stmt_num_rows() en su lugar.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Un entero mayor que cero indica el número de filas afectadas o recuperadas.


Cero indica que no hubo registros actualizados para un sentencia
UPDATE/DELETE, ninguna fila coincidio con la cláusula WHERE en la consulta
o que ninguna consulta ha sido ejecutado. -1 Indica que la consulta ha devuelto
un error. NULL indica un argumento no válido fue enviada a la función.

Nota:

191
Si el número de filas afectadas es mayor que el valor entero maximo de PHP,
el número de filas afectadas se obtiene como una cadena.
Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_clave", "world");

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Error de conexión: %s\n", mysqli_connect_error());
exit();
}

/* crear tabla temporal */


$mysqli->query("CREATE TEMPORARY TABLE myCountry LIKE Country");

$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE
?";

/* preparar sentencia */
if ($stmt = $mysqli->prepare($query)) {

/* Agrega variable para marcador de posición */


$code = 'A%';
$stmt->bind_param("s", $code);

/* ejecutar sentencia */
$stmt->execute();

printf("filas insertadas: %d\n", $stmt->affected_rows);

/* cerrar sentencia */
$stmt->close();
}

/* cerrar conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$link = mysqli_connect("localhost", "mi_usuario", "my_clave", "world")
;

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Error de conexión: %s\n", mysqli_connect_error());
exit();
}

/* crear tabla temporal*/


mysqli_query($link, "CREATE TEMPORARY TABLE myCountry LIKE Country");

192
$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE
?";

/* preparar sentencia */
if ($stmt = mysqli_prepare($link, $query)) {

/* Agrega variable para marcador de posición */


$code = 'A%';
mysqli_stmt_bind_param($stmt, "s", $code);

/* ejecutar sentencia */
mysqli_stmt_execute($stmt);

printf("filas insertadas: %d\n", mysqli_stmt_affected_rows($stmt))


;

/* cerrar sentencia */
mysqli_stmt_close($stmt);
}

/* cerrar conexión */
mysqli_close($link);
?>

El resultado del ejemplo sería:

filas insertadas: 17
Ver también ¶

 mysqli_stmt_num_rows() - Devuelve el número de filas de un conjunto de


resultados de una sentencia
 mysqli_prepare() - Prepara una sentencia SQL para su ejecución

mysqli_stmt::attr_get
mysqli_stmt_attr_get
(PHP 5, PHP 7)

mysqli_stmt::attr_get -- mysqli_stmt_attr_get — Se utiliza para obtener el valor


actual de un atributo de la sentencia

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::attr_get ( int $attr ) : int

193
Estilo por procedimientos

mysqli_stmt_attr_get ( mysqli_stmt $stmt , int $attr ) : int

Obtiene el valor actual de un atributo de la sentencia.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

attr

El atributo que desea obtener.

Valores devueltos ¶

Devuelve FALSE si el atributo no se encuentra, en caso contrario devuelve el


valor del atributo.

mysqli_stmt::attr_set
mysqli_stmt_attr_set
(PHP 5, PHP 7)

mysqli_stmt::attr_set -- mysqli_stmt_attr_set — Se utiliza para modificar el


comportamiento de una sentencia preparada

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::attr_set ( int $attr , int $mode ) : bool

Estilo por procedimientos

mysqli_stmt_attr_set ( mysqli_stmt $stmt , int $attr , int $mode )


: bool

Se utiliza para modificar el comportamiento de una sentencia preparada. Esta


función puede ser llamada varias veces para establecer varios atributos.

Parámetros ¶
stmt

194
Sólo estilo por procediminetos: Un identificador de declaraciones
devuelto por mysqli_stmt_init().

attr

El atributo que desea establecer. Puede tener uno de los siguientes


valores:

Valores de atributos

Carácter Descripción

MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH Si se establece
a TRUE, mysqli_stmt_store_result() actualizará el
valor de metadato de MYSQL_FIELD->max_length.

MYSQLI_STMT_ATTR_CURSOR_TYPE Tipo de cursor para abrir la sentencia


cuando mysqli_stmt_execute() se
invoca. mode puede
ser MYSQLI_CURSOR_TYPE_NO_CURSOR (por
defecto) o MYSQLI_CURSOR_TYPE_READ_ONLY.

MYSQLI_STMT_ATTR_PREFETCH_ROWS Número de filas a obtener de un servidor en un


momento cuando se utiliza un cursor. mode puede
estar en el rango de 1 al máximo valor de un entero
sin signo. El valor predeterminado es 1.

Si usa la
opción MYSQLI_STMT_ATTR_CURSOR_TYPE con MYSQLI_CURSOR
_TYPE_READ_ONLY, un cursor es abierto para la sentencia cuando se
invoca mysqli_stmt_execute(). Si ya hay un cursor abierto desde la
llamada anterior de mysqli_stmt_execute(), se cierra el cursor antes de
abrir uno nuevo. mysqli_stmt_reset() también cierra cualquier cursor
abierto antes de preparar la sentencia para su re-
ejecución. mysqli_stmt_free_result() cierra cualquier cursor abierto.

Si abre un cursor para una sentencia


preparada, mysqli_stmt_store_result() es innecesario.

mode

El valor a asignar a este atributo.

Ver también ¶

 » Connector/MySQL mysql_stmt_attr_set()

195
mysqli_stmt::bind_param
mysqli_stmt_bind_param
(PHP 5, PHP 7)

mysqli_stmt::bind_param -- mysqli_stmt_bind_param — Agrega variables a una


sentencia preparada como parámetros

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::bind_param ( string $types , mixed &$var1 [, mixed &$...


] ) : bool

Estilo por procedimientos

mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$v


ar1 [, mixed &$... ] ) : bool

Enlaza variables para los marcadores de parámetros en la instrucción SQL que


se envía a mysqli_prepare().

Nota:
Si el tamaño de los datos de una variable excede el tamaño máximo del
paquete permitido (max_allowed_packet), usted tiene que
especificar b en types y usar mysqli_stmt_send_long_data() para enviar los
datos en paquetes.
Nota:
Debe de tener cuidado cuando use mysqli_stmt_bind_param() en conjunción
con call_user_func_array(). Tenga en cuenta
que mysqli_stmt_bind_param() requiere de parámetros que se pasan por
referencia, mientras que call_user_func_array() puede aceptar como parámetro
una lista de variables que pueden representar referencias o valores.
Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

types

Una cadena que contiene uno o más caracteres que especifican los
tipos para el correspondiente enlazado de variables:

196
Especificación del tipo de caracteres

Carácter Descripción

i la variable correspondiente es de tipo entero

d la variable correspondiente es de tipo double

s la variable correspondiente es de tipo string

b la variable correspondiente es un blob y se envía en paquetes


var1

El número de variables y la longitud de la cadena types debe coincidir


con los parámetros en la sentencia.

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

/* verificar conexión */
if (mysqli_connect_errno()) {
printf("Error de conexión: %s\n", mysqli_connect_error());
exit();
}

$stmt = $mysqli-
>prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/* ejecuta sentencias prepradas */


$stmt->execute();

printf("%d Fila insertada.\n", $stmt->affected_rows);

/* cierra sentencia y conexión */


$stmt->close();

/* Limpia la tabla CountryLanguage */


$mysqli-
>query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Fila borrada.\n", $mysqli->affected_rows);

197
/* cierra la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

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

/* verificar conexión */
if (!$link) {
printf("Error de conexión: %s\n", mysqli_connect_error());
exit();
}

$stmt = mysqli_prepare($link, "INSERT INTO CountryLanguage VALUES (?,


?, ?, ?)");
mysqli_stmt_bind_param($stmt, 'sssd', $code, $language, $official, $pe
rcent);

$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;

/* ejecuta sentencias preparadas */


mysqli_stmt_execute($stmt);

printf("%d Fila insertada.\n", mysqli_stmt_affected_rows($stmt));

/* cierra sentencia y conexión */


mysqli_stmt_close($stmt);

/* Limpia la tabla CountryLanguage */


mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavar
ian'");
printf("%d Fila borrada.\n", mysqli_affected_rows($link));

/* cierra la conexión */
mysqli_close($link);
?>

El resultado del ejemplo sería:

1 Fila insertada.
1 Fila borrada.
Ver también ¶

 mysqli_stmt_bind_result() - Vincula variables a una sentencia preparada para el


almacenamiento de resultados
 mysqli_stmt_execute() - Ejecuta una consulta preparada
 mysqli_stmt_fetch() - Obtiene los resultados de una sentencia preparadas en
las variables vinculadas

198
 mysqli_prepare() - Prepara una sentencia SQL para su ejecución
 mysqli_stmt_send_long_data() - Enviar datos en bloques
 mysqli_stmt_errno() - Devuelve el código de error de la llamada de la sentencia
más reciente
 mysqli_stmt_error() - Devuelve una descripción en forma de string del último
error de una sentencia

mysqli_stmt::bind_result
mysqli_stmt_bind_result
(PHP 5, PHP 7)

mysqli_stmt::bind_result -- mysqli_stmt_bind_result — Vincula variables a una


sentencia preparada para el almacenamiento de resultados

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::bind_result ( mixed &$var1 [, mixed &$... ] ) : bool

Estilo por procedimientos

mysqli_stmt_bind_result ( mysqli_stmt $stmt , mixed &$var1 [, mixed &$


... ] ) : bool

Vincula columnas del conjunto de resultados a variables.

Cuando se llama a mysqli_stmt_fetch() para obtener datos, el protocolo


cliente/servidor de MySQL coloca los datos de las columnas vinculads en las
variables especificadas por var1, ....

Nota:
Observe que todas las columnas deben ser vinculadas después de llamar
a mysqli_stmt_execute() y antes de llamar a mysqli_stmt_fetch(). Dependiendo
de los tipos de columna las variables pueden cambiar silenciosamente al tipo
de PHP correspondiente.

Una columna puede ser vinculada o revinculada en cualquier momento, incluso


después de que un conjunto de resultados haya sido parcialmente recuperado.
La nueva vinculación toma efecto la siguiente vez que se llame
a mysqli_stmt_fetch().

199
Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

var1

La variable a vincular.

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

/* sentencia preparada */
if ($sentencia = $mysqli-
>prepare("SELECT Code, Name FROM Country ORDER BY Name LIMIT 5")) {
$sentencia->execute();

/* vincular variables a la sentencia preparada */


$sentencia->bind_result($col1, $col2);

/* obtener valores */
while ($sentencia->fetch()) {
printf("%s %s\n", $col1, $col2);
}

/* cerrar la sentencia */
$sentencia->close();
}
/* cerrar la conexión */
$mysqli->close();

?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

200
/* comprobar la conexión */
if (!$enlace) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

/* sentencia preparada */
if ($sentencia = mysqli_prepare($enlace, "SELECT Code, Name FROM Count
ry ORDER BY Name LIMIT 5")) {
mysqli_stmt_execute($sentencia);

/* vincular variables a la sentencia preparada */


mysqli_stmt_bind_result($sentencia, $col1, $col2);

/* obtener valores */
while (mysqli_stmt_fetch($sentencia)) {
printf("%s %s\n", $col1, $col2);
}

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

AFG Afghanistan
ALB Albania
DZA Algeria
ASM American Samoa
AND Andorra
Ver también ¶

 mysqli_stmt_get_result() - Obtiene un conjunto de resultados de una sentencia


preparada
 mysqli_stmt_bind_param() - Agrega variables a una sentencia preparada como
parámetros
 mysqli_stmt_execute() - Ejecuta una consulta preparada
 mysqli_stmt_fetch() - Obtiene los resultados de una sentencia preparadas en
las variables vinculadas
 mysqli_prepare() - Prepara una sentencia SQL para su ejecución
 mysqli_stmt_prepare() - Preparar una sentencia SQL para su ejecución
 mysqli_stmt_init() - Inicializa una sentencia y devuelve un objeto para usarlo
con mysqli_stmt_prepare
 mysqli_stmt_errno() - Devuelve el código de error de la llamada de la sentencia
más reciente
 mysqli_stmt_error() - Devuelve una descripción en forma de string del último
error de una sentencia

201
mysqli_stmt::close
mysqli_stmt_close
(PHP 5, PHP 7)

mysqli_stmt::close -- mysqli_stmt_close — Cierra una sentencia preparada

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::close ( void ) : bool

Estilo por procedimientos

mysqli_stmt_close ( mysqli_stmt $stmt ) : bool

Cierra una sentencia preparada. mysqli_stmt_close() también desasigna el


gestor de sentencias. Si la sentencia actual tiene resultados pendientes o no
leídos, esta función los cancelará, por lo que se podrá ejecutar la siguiente
consulta.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución

add a note
User Contributed Notes 1 note

202
mysqli_stmt::__construct
(PHP 5, PHP 7)

mysqli_stmt::__construct — Construye un nuevo objeto mysqli_stmt

Descripción ¶
mysqli_stmt::__construct ( mysqli $link [, string $query ] )

Este método construye un nuevo objeto mysqli_stmt.

Nota:
En general, se debería utilizar mysqli_prepare() o mysqli_stmt_init() para crear
un objeto mysqli_stmt, en lugar de instanciar directamente el objeto con new
mysqli_stmt. Este método (y la capacidad de instanciar directamente
objetos mysqli_stmt) podrían quedar obsoletos y ser eliminados en el futuro.
Parámetros ¶
link

Sólo estilo por procediminetos: Un identificador de enlace devuelto


por mysqli_connect() o mysqli_init()

query

La consulta, como un string. Si se omite este parámetro, el constructor


se comporta de forma idéntica a mysqli_stmt_init(); si se proporciona, se
comporta como mysqli_prepare().

Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución


 mysqli_stmt_init() - Inicializa una sentencia y devuelve un objeto para usarlo
con mysqli_stmt_prepare

mysqli_stmt::data_seek
mysqli_stmt_data_seek
(PHP 5, PHP 7)

mysqli_stmt::data_seek -- mysqli_stmt_data_seek — Busca una fila arbitraria


en un conjunto de resultados de una sentencia

203
Descripción ¶

Estilo orientado a objetos

mysqli_stmt::data_seek ( int $offset ) : void

Estilo por procedimientos

mysqli_stmt_data_seek ( mysqli_stmt $stmt , int $offset ) : void

Busca un puntero de resultados arbitrario en un conjunto de resultados de una


sentencia.

mysqli_stmt_store_result() debe llamarse antes de mysqli_stmt_data_seek().

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

offset

Debe estar entre cero y el número total de filas menos 1


(0.. mysqli_stmt_num_rows() - 1).

Valores devueltos ¶

No devuelve ningún valor.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER BY Name";


if ($sentencia = $mysqli->prepare($consulta)) {

/* execute consulta */
$sentencia->execute();

/* vincular las varilbes al resultado */

204
$sentencia->bind_result($nombre, $código);

/* almacenar el resultado */
$sentencia->store_result();

/* buscar la fila nº 400 */


$sentencia->data_seek(399);

/* obtener los valores */


$sentencia->fetch();

printf ("Ciudad: %s Countrycode: %s\n", $nombre, $código);

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* Abrir una conexión */
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER BY Name";


if ($sentencia = mysqli_prepare($enlace, $consulta)) {

/* execute consulta */
mysqli_stmt_execute($sentencia);

/* vincular las varilbes al resultado */


mysqli_stmt_bind_result($sentencia, $nombre, $código);

/* almacenar el resultado */
mysqli_stmt_store_result($sentencia);

/* buscar la fila nº 400 */


mysqli_stmt_data_seek($sentencia, 399);

/* obtener los valores */


mysqli_stmt_fetch($sentencia);

printf ("Ciudad: %s Countrycode: %s\n", $nombre, $código);

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);

205
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Ciudad: Benin City Countrycode: NGA


Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución

mysqli_stmt::$errno
mysqli_stmt_errno
(PHP 5, PHP 7)

mysqli_stmt::$errno -- mysqli_stmt_errno — Devuelve el código de error de la


llamada de la sentencia más reciente

Descripción ¶

Estilo orientado a objetos

int $mysqli_stmt->errno;

Estilo por procedimientos

mysqli_stmt_errno ( mysqli_stmt $stmt ) : int

Devuelve el código de error de la función de la sentencia invocada más


recientemente que tuvo éxito o falló.

Los números de los mensajes de error del cliente están listados en el fichero de
cabecera errmsg.h de MySQL, los números de los mensajes de error del
servidor están listados en mysqld_error.h. En la distribución original de MySQL
se puede encontrar una lista completa de los mensajes de error y los números
de los errores en el fichero Docs/mysqld_error.txt.

Parámetros ¶
stmt

206
Sólo estilo por procediminetos: Un identificador de declaraciones
devuelto por mysqli_stmt_init().

Valores devueltos ¶

Un valor de código de error. Cero significa que no se encontraron errores.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$mysqli->query("CREATE TABLE myCountry LIKE Country");


$mysqli->query("INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";


if ($sentencia = $mysqli->prepare($consulta)) {

/* eliminar la tabla */
$mysqli->query("DROP TABLE myCountry");

/* ejecutar la consulta */
$sentencia->execute();

printf("Error: %d.\n", $sentencia->errno);

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* Abrir una conexión */
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());

207
exit();
}

mysqli_query($enlace, "CREATE TABLE myCountry LIKE Country");


mysqli_query($enlace, "INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";


if ($sentencia = mysqli_prepare($enlace, $consulta)) {

/* eliminar la tabla */
mysqli_query($enlace, "DROP TABLE myCountry");

/* ejecutar la consulta */
mysqli_stmt_execute($sentencia);

printf("Error: %d.\n", mysqli_stmt_errno($sentencia));

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Error: 1146.
Ver también ¶

 mysqli_stmt_error() - Devuelve una descripción en forma de string del último


error de una sentencia
 mysqli_stmt_sqlstate() - Devuelve el error SQLSTATE de la operación de
sentencia previa

mysqli_stmt::$error_list
mysqli_stmt_error_list
(PHP 5 >= 5.4.0, PHP 7)

mysqli_stmt::$error_list -- mysqli_stmt_error_list — Devuelve una lista de


errores de la última sentencia ejecutada

208
Descripción ¶

Estilo orientado a objetos

array $mysqli_stmt->error_list;

Estilo por procedimientos

mysqli_stmt_error_list ( mysqli_stmt $stmt ) : array

Devuelve un array de errores de la función de la sentencia invocada más


receientemente que tuvo éxito o falló.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Una lista de errores, cada uno como un array asociativo que contiene el errno,
error, y sqlstate.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$mysqli->query("CREATE TABLE myCountry LIKE Country");


$mysqli->query("INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";


if ($sentencia = $mysqli->prepare($consulta)) {

/* eliminar la tabla */
$mysqli->query("DROP TABLE myCountry");

/* ejecutar la consulta */
$sentencia->execute();

echo "Error:\n";

209
print_r($sentencia->error_list);

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* Abrir una conexión */
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

mysqli_query($enlace, "CREATE TABLE myCountry LIKE Country");


mysqli_query($enlace, "INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";


if ($sentencia = mysqli_prepare($enlace, $consulta)) {

/* eliminar la tabla */
mysqli_query($enlace, "DROP TABLE myCountry");

/* ejecutar la consulta */
mysqli_stmt_execute($sentencia);

echo "Error:\n";
print_r(mysql_stmt_error_list($sentencia));

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Array
(
[0] => Array
(
[errno] => 1146
[sqlstate] => 42S02
[error] => Table 'world.myCountry' doesn't exist
)

210
)
Ver también ¶

 mysqli_stmt_error() - Devuelve una descripción en forma de string del último


error de una sentencia
 mysqli_stmt_errno() - Devuelve el código de error de la llamada de la sentencia
más reciente
 mysqli_stmt_sqlstate() - Devuelve el error SQLSTATE de la operación de
sentencia previa

mysqli_stmt::$error
mysqli_stmt_error
(PHP 5, PHP 7)

mysqli_stmt::$error -- mysqli_stmt_error — Devuelve una descripción en forma


de string del último error de una sentencia

Descripción ¶

Estilo orientado a objetos

string $mysqli_stmt->error;

Estilo por procedimientos

mysqli_stmt_error ( mysqli_stmt $stmt ) : string

Devuelve un string que contiene el mensaje de error de la función de la


sentencia invocada más receientemente que tuvo éxito o falló.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Un string que describe el error. Un string vacío si no ocurrió ningún error.

211
Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$mysqli->query("CREATE TABLE myCountry LIKE Country");


$mysqli->query("INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";


if ($sentencia = $mysqli->prepare($consulta)) {

/* eliminar la tabla */
$mysqli->query("DROP TABLE myCountry");

/* ejecutar la sentencia */
$sentencia->execute();

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

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* Abrir una conexión */
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

mysqli_query($enlace, "CREATE TABLE myCountry LIKE Country");


mysqli_query($enlace, "INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";

212
if ($sentencia = mysqli_prepare($enlace, $consulta)) {

/* eliminar la tabla */
mysqli_query($enlace, "DROP TABLE myCountry");

/* ejecutar la sentencia */
mysqli_stmt_execute($sentencia);

printf("Error: %s.\n", mysqli_stmt_error($sentencia));

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Error: Table 'world.myCountry' doesn't exist.


Ver también ¶

 mysqli_stmt_errno() - Devuelve el código de error de la llamada de la sentencia


más reciente
 mysqli_stmt_sqlstate() - Devuelve el error SQLSTATE de la operación de
sentencia previa

mysqli_stmt::execute
mysqli_stmt_execute
(PHP 5, PHP 7)

mysqli_stmt::execute -- mysqli_stmt_execute — Ejecuta una consulta


preparada

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::execute ( void ) : bool

Estilo por procedimientos

mysqli_stmt_execute ( mysqli_stmt $stmt ) : bool

213
Ejecuta una consulta que ha sido previamente preparada usando la
función mysqli_prepare(). Cuando se ejecutó cualquier marcador de parámetro
que existe, será automáticamente reemplazado con los datos apropiados.

Si la sentencia es UPDATE, DELETE, o INSERT, se puede determinar el


número total de filas afectadas usando le función mysqli_stmt_affected_rows().
Asimismo, si la consulta produce un conjunto de resultados se usa la
función mysqli_stmt_fetch().

Nota:
Al usar mysqli_stmt_execute(), se debe usar la
función mysqli_stmt_fetch() para obtener los datos antes de realizar cualquier
consulta adicional.
Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$mysqli->query("CREATE TABLE myCity LIKE City");

/* Preparar una sentencia INSERT */


$consulta = "INSERT INTO myCity (Name, CountryCode, District) VALUES (
?,?,?)";
$sentencia = $mysqli->prepare($consulta);

$sentencia->bind_param("sss", $val1, $val2, $val3);

$val1 = 'Stuttgart';
$val2 = 'DEU';
$val3 = 'Baden-Wuerttemberg';

/* Ejecutar la sentencia */
$sentencia->execute();

214
$val1 = 'Bordeaux';
$val2 = 'FRA';
$val3 = 'Aquitaine';

/* Ejecutar la sentencia */
$sentencia->execute();

/* cerrar la sentencia */
$sentencia->close();

/* recuperar todas las filas de myCity */


$consulta = "SELECT Name, CountryCode, District FROM myCity";
if ($resultado = $mysqli->query($consulta)) {
while ($fila = $resultado->fetch_row()) {
printf("%s (%s,%s)\n", $fila[0], $fila[1], $fila[2]);
}
/* liberar el conjunto de resultados */
$resultado->close();
}

/* eliminar la tabla */
$mysqli->query("DROP TABLE myCity");

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

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

/* Preparar una sentencia INSERT */


$consulta = "INSERT INTO myCity (Name, CountryCode, District) VALUES (
?,?,?)";
$sentencia = mysqli_prepare($enlace, $consulta);

mysqli_stmt_bind_param($sentencia, "sss", $val1, $val2, $val3);

$val1 = 'Stuttgart';
$val2 = 'DEU';
$val3 = 'Baden-Wuerttemberg';

/* Ejecutar la sentencia */
mysqli_stmt_execute($sentencia);

$val1 = 'Bordeaux';

215
$val2 = 'FRA';
$val3 = 'Aquitaine';

/* Ejecutar la sentencia */
mysqli_stmt_execute($sentencia);

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);

/* recuperar todas las filas de myCity */


$consulta = "SELECT Name, CountryCode, District FROM myCity";
if ($resultado = mysqli_query($enlace, $consulta)) {
while ($fila = mysqli_fetch_row($resultado)) {
printf("%s (%s,%s)\n", $fila[0], $fila[1], $fila[2]);
}
/* liberar el conjunto de resultados */
mysqli_free_result($resultado);
}

/* eliminar la tabla */
mysqli_query($enlace, "DROP TABLE myCity");

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Stuttgart (DEU,Baden-Wuerttemberg)
Bordeaux (FRA,Aquitaine)
Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución


 mysqli_stmt_bind_param() - Agrega variables a una sentencia preparada como
parámetros
 mysqli_stmt_get_result() - Obtiene un conjunto de resultados de una sentencia
preparada

mysqli_stmt::fetch
mysqli_stmt_fetch
(PHP 5, PHP 7)

mysqli_stmt::fetch -- mysqli_stmt_fetch — Obtiene los resultados de una


sentencia preparadas en las variables vinculadas

216
Descripción ¶

Estilo orientado a objetos

mysqli_stmt::fetch ( void ) : bool

Estilo por procedimientos

mysqli_stmt_fetch ( mysqli_stmt $stmt ) : bool

Obtiene los resultados de una sentencia preparadas en las variables vinculadas


mediante mysqli_stmt_bind_result().

Nota:
Observe que todas las columnas deben estar vinculadas por la aplicación antes
de llamar a mysqli_stmt_fetch().
Nota:
Los datos son transferidos sin almacenarlos en buffer sin llamar
a mysqli_stmt_store_result(), la cual puede disminuir el rendimiento (pero
reduce el coste de memoria).
Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶
Valores devueltos

Valor Descripción
TRUE Éxito. Los datos se han obtenido
FALSE Ocurrió un error
NULL No existen más filas/datos u ocurrió un truncamiento de los datos

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT

217
150,5";

if ($sentencia = $mysqli->prepare($consulta)) {

/* ejecutar la sentencia */
$sentencia->execute();

/* vincular las variables de resultados */


$sentencia->bind_result($nombre, $código);

/* obtener los valores */


while ($sentencia->fetch()) {
printf ("%s (%s)\n", $nombre, $código);
}

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT


150,5";

if ($sentencia = mysqli_prepare($link, $consulta)) {

/* ejecutar la sentencia */
mysqli_stmt_execute($sentencia);

/* vincular las variables de resultados */


mysqli_stmt_bind_result($sentencia, $nombre, $código);

/* obtener los valores */


while (mysqli_stmt_fetch($sentencia)) {
printf ("%s (%s)\n", $nombre, $código);
}

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */

218
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Rockford (USA)
Tallahassee (USA)
Salinas (USA)
Santa Clarita (USA)
Springfield (USA)
Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución


 mysqli_stmt_errno() - Devuelve el código de error de la llamada de la sentencia
más reciente
 mysqli_stmt_error() - Devuelve una descripción en forma de string del último
error de una sentencia
 mysqli_stmt_bind_result() - Vincula variables a una sentencia preparada para el
almacenamiento de resultados

mysqli_stmt::$field_count
mysqli_stmt_field_count
(PHP 5, PHP 7)

mysqli_stmt::$field_count -- mysqli_stmt_field_count — Devuelve el número de


campos de la sentencia dada

Descripción ¶

Estilo orientado a objetos

int $mysqli_stmt->field_count;

Estilo por procedimientos

mysqli_stmt_field_count ( mysqli_stmt $stmt ) : int


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.

219
mysqli_stmt::free_result
mysqli_stmt_free_result
(PHP 5, PHP 7)

mysqli_stmt::free_result -- mysqli_stmt_free_result — Libera la memoria de los


resultados almacenados del gestor de sentencia dado

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::free_result ( void ) : void

Estilo por procedimientos

mysqli_stmt_free_result ( mysqli_stmt $stmt ) : void

Libera la memoria de los resultados asociados con la sentencia, la cual fue


asignada por mysqli_stmt_store_result().

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

No devuelve ningún valor.

Ver también ¶

 mysqli_stmt_store_result() - Transfiere un conjunto de resultados desde una


sentencia preparada

mysqli_stmt::get_result
mysqli_stmt_get_result
(PHP 5 >= 5.3.0, PHP 7)

220
mysqli_stmt::get_result -- mysqli_stmt_get_result — Obtiene un conjunto de
resultados de una sentencia preparada

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::get_result ( void ) : mysqli_result

Estilo por procedimientos

mysqli_stmt_get_result ( mysqli_stmt $stmt ) : mysqli_result

Es llamada para devolver un conjunto de resultados de una consulta de


sentencia preparada.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve un conjunto de resultados para consultas SELECT select,


o FALSE para otras consultas DML o en caso de fallo. La
función mysqli_errno() se puede emplear para distinguir entre dos tipos de fallo.

Solo Controlador Nativo de MySQL ¶

Disponible sólo con mysqlnd.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php

$mysqli = new mysqli("127.0.0.1", "usuario", "contraseña", "world");

if($mysqli->connect_error)
{
die("$mysqli->connect_errno: $mysqli->connect_error");
}

$consulta = "SELECT Name, Population, Continent FROM Country WHERE Con


tinent=? ORDER BY Name LIMIT 1";

$sentencia = $mysqli->stmt_init();
if(!$sentencia->prepare($consulta))
{
print "Falló la preparación de la sentencia\n";

221
}
else
{
$sentencia->bind_param("s", $continente);

$array_continentes = array('Europe','Africa','Asia','North America


');

foreach($array_continentes as $continente)
{
$sentencia->execute();
$resultado = $sentencia->get_result();
while ($fila = $resultado->fetch_array(MYSQLI_NUM))
{
foreach ($fila as $f)
{
print "$f ";
}
print "\n";
}
}
}

$sentencia->close();
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php

$enlace = mysqli_connect("127.0.0.1", "usuario", "contraseña", "world"


);

if (!$enlace)
{
$error = mysqli_connect_error();
$errno = mysqli_connect_errno();
print "$errno: $error\n";
exit();
}

$consulta = "SELECT Name, Population, Continent FROM Country WHERE Con


tinent=? ORDER BY Name LIMIT 1";

$sentencia = mysqli_stmt_init($enlace);
if(!mysqli_stmt_prepare($sentencia, $consulta))
{
print "Falló la preparación de la sentencia\n";
}
else
{
mysqli_stmt_bind_param($stmt, "s", $continente);

$array_continentes = array('Europe','Africa','Asia','North America


');

222
foreach($array_continentes as $continente)
{
mysqli_stmt_execute($sentencia);
$resultado = mysqli_stmt_get_result($sentencia);
while ($fila = mysqli_fetch_array($resultado, MYSQLI_NUM))
{
foreach ($fila as $f)
{
print "$f ";
}
print "\n";
}
}
}
mysqli_stmt_close($sentencia);
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Albania 3401200 Europe


Algeria 31471000 Africa
Afghanistan 22720000 Asia
Anguilla 8000 North America
Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución


 mysqli_stmt_result_metadata() - Devuelve los metadatos del conjunto de
resultados de una sentencia preparada
 mysqli_stmt_fetch() - Obtiene los resultados de una sentencia preparadas en
las variables vinculadas
 mysqli_fetch_array() - Obtiene una fila de resultados como un array asociativo,
numérico, o ambos
 mysqli_stmt_store_result() - Transfiere un conjunto de resultados desde una
sentencia preparada
 mysqli_errno() - Devuelve el código del error de la última función llamada

mysqli_stmt::get_warnings
mysqli_stmt_get_warnings
(PHP 5 >= 5.1.0, PHP 7)

mysqli_stmt::get_warnings -- mysqli_stmt_get_warnings — Obtener los


resultados de SHOW WARNINGS

223
Descripción ¶

Estilo orientado a objetos

mysqli_stmt::get_warnings ( mysqli_stmt $stmt ) : object

Estilo por procedimientos

mysqli_stmt_get_warnings ( mysqli_stmt $stmt ) : object


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.

mysqli_stmt::$insert_id
mysqli_stmt_insert_id
(PHP 5, PHP 7)

mysqli_stmt::$insert_id -- mysqli_stmt_insert_id — Obtener el ID generado en


la operación INSERT anterior

Descripción ¶

Estilo orientado a objetos

int $mysqli_stmt->insert_id;

Estilo por procedimientos

mysqli_stmt_insert_id ( mysqli_stmt $stmt ) : mixed


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.

mysqli_stmt::more_results
mysqli_stmt_more_results
(PHP 5 >= 5.3.0, PHP 7)

224
mysqli_stmt::more_results -- mysqli_stmt_more_results — Comprobar si
existen más resultados de una consulta de consultas múltiples

Descripción ¶

Estilo orientado a objetos (method):

public mysqli_stmt::more_results ( void ) : bool

Estilo por procedimientos:

mysqli_stmt_more_results ( mysql_stmt $stmt ) : bool

Comprueba si existen más resultados de una consulta de múltiples consultas.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve TRUE si existen más resultados, de lo contrario FALSE.

Solo Controlador Nativo de MySQL ¶

Disponible sólo con mysqlnd.

Ver también ¶

 mysqli_stmt::next_result() - Lee el siguiente resultado de una consulta múltiple


 mysqli::multi_query() - Realiza una consulta a la base de datos

mysqli_stmt::next_result
mysqli_stmt_next_result
(PHP 5 >= 5.3.0, PHP 7)

mysqli_stmt::next_result -- mysqli_stmt_next_result — Lee el siguiente


resultado de una consulta múltiple

Descripción ¶

Estilo orientado a objetos (method):


225
public mysqli_stmt::next_result ( void ) : bool

Estilo por procedimientos:

mysqli_stmt_next_result ( mysql_stmt $stmt ) : bool

Lee el siguiente resultado de una consulta múltiple.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Errores/Excepciones ¶

Emite un error de nivel E_STRICT si no existe un conjunto de resultados, y


sugiere el uso de mysqli_stmt::more_results() en estos casos, antes de llamar
a mysqli_stmt::next_result().

mysqli_stmt::$num_rows
mysqli_stmt_num_rows
(PHP 5, PHP 7)

mysqli_stmt::$num_rows -- mysqli_stmt_num_rows — Devuelve el número de


filas de un conjunto de resultados de una sentencia

Descripción ¶

Estilo orientado a objetos

int $mysqli_stmt->num_rows;

Estilo por procedimientos

mysqli_stmt_num_rows ( mysqli_stmt $stmt ) : int

Devuelve el número de filas de un conjunto de resultados. El uso


de mysqli_stmt_num_rows() depende de si se

226
utiliza mysqli_stmt_store_result() para almacenar en buffer el conjunto de
resultados completo en el gestor de sentencia.

Si se usa mysqli_stmt_store_result(), mysqli_stmt_num_rows() puede llamarse


inmediatamente.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Un valor integer que representa el número de filas del conjunto de resultados.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20


";
if ($sentencia = $mysqli->prepare($consulta)) {

/* ejecutar la consulta */
$sentencia->execute();

/* almacenar el resultado */
$sentencia->store_result();

printf("Número de filas: %d.\n", $sentencia->num_rows);

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

227
<?php
/* Abrir una conexión */
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20


";
if ($sentencia = mysqli_prepare($enlace, $consulta)) {

/* ejecutar la consulta */
mysqli_stmt_execute($sentencia);

/* almacenar el resultado */
mysqli_stmt_store_result($sentencia);

printf("Número de filas: %d.\n", mysqli_stmt_num_rows($sentencia))


;

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Número de filas: 20.


Ver también ¶

 mysqli_stmt_affected_rows() - Devuelve el número total de filas cambiadas,


borradas, o insertadas por la última sentencia ejecutada
 mysqli_prepare() - Prepara una sentencia SQL para su ejecución
 mysqli_stmt_store_result() - Transfiere un conjunto de resultados desde una
sentencia preparada

228
mysqli_stmt::$param_count
mysqli_stmt_param_count
(PHP 5, PHP 7)

mysqli_stmt::$param_count -- mysqli_stmt_param_count — Devuelve el


número de parámetros de la sentencia dada

Descripción ¶

Estilo orientado a objetos

int $mysqli_stmt->param_count;

Estilo por procedimientos

mysqli_stmt_param_count ( mysqli_stmt $stmt ) : int

Devuelve el número de marcadores de parámetros presentes en la sentencia


preparada.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

mysqli_stmt::prepare
mysqli_stmt_prepare
(PHP 5, PHP 7)

mysqli_stmt::prepare -- mysqli_stmt_prepare — Preparar una sentencia SQL


para su ejecución

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::prepare ( string $query ) : mixed

Estilo por procedimientos

229
mysqli_stmt_prepare ( mysqli_stmt $stmt , string $query ) : bool

Prepara una consulta the SQL apuntada por la consulta de cadena terminada
en null.

Los marcadores de parámetros deben estar vinculados a las variables de la


apliación
usando mysqli_stmt_bind_param() y/o mysqli_stmt_bind_result() antes de
ejecutar la sentencia u obtener filas.

Nota:
En el caso de que se pase una sentencia a mysqli_stmt_prepare() que sea más
grande que max_allowed_packet del servidor, los códigos de error devueltos
serán diferentes, dependiendo de si se usa el Controlador Nativo de MysQL
(mysqlnd) o la biblioteca Cliente de MySQL (libmysqlclient). El comportamiento
es como sigue:
o mysqlnd en Linux devuelve un código de error 1153. El mensaje de error
significa obtenido un paquete mas grande
que max_allowed_packet bytes.
o mysqlnd en Windows devuelve un código de error 2006. Este mensaje
de error significa el servidor se ha ido.
o libmysqlclient en todas las plataformas devuelve un código de error
2006. Este mensaje de error significa el servidor se ha ido.
Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

query

La consulta, como una cadena. Debe consistir en una sentencia SQL


única.

Se puede incluir uno o más marcadores de parámetros en la senetencia


SQL embebiendo el carácter de signo de interrogación (?) en la posición
apropiada.

Nota:
No se debería añadir un punto y coma terminal o \g a la sentencia.
Nota:
Los marcadores únicamente son legales en ciertos lugares de las
sentencias SQL. Por ejemplo, están permitidos en la lista de VALUES()
de una sentencia INSERT (para especificar los valores de las columnas
de una fila), o en una comparación en una cláusula WHERE para
especificar un valor de comparación.

Sin embargo, no están permitidos en identificadores (como nombres de


tablas o columnas), en la lista de selección que nombra a las columnas a
ser devueltas por una sentencia SELECT), o para especificar ambos

230
operandos de un operador binario como signo igual =. La última
restricción es necesaria debido a que sería imposible determinar el tipo
de parámetro. En general, los parámetros son legales únicamente en
sentencias de Lenguaje de Manipulación de Datos (DML), y no en
sentencias de Lenguaje de Definición de Datos (DDL).

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$ciudad = "Amersfoort";

/* crear una sentencia preparada */


$sentencia = $mysqli->stmt_init();
if ($sentencia->prepare("SELECT District FROM City WHERE Name=?")) {

/* vincular los parámetros para los marcadores */


$sentencia->bind_param("s", $ciudad);

/* ejecutar la consulta */
$sentencia->execute();

/* vincular las variables de resultados */


$sentencia->bind_result($distrito);

/* obtener el valor */
$sentencia->fetch();

printf("%s está en el distrito de %s\n", $ciudad, $distrito);

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

231
<?php
$enlace = mysqli_connect("localhost", "my_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$ciudad = "Amersfoort";

/* crear una sentencia preparada */


$sentencia = mysqli_stmt_init($enlace);
if (mysqli_stmt_prepare($sentencia, 'SELECT District FROM City WHERE N
ame=?')) {

/* vincular los parámetros para los marcadores */


mysqli_stmt_bind_param($sentencia, "s", $ciudad);

/* ejecutar la consulta */
mysqli_stmt_execute($sentencia);

/* vincular las variables de resultados */


mysqli_stmt_bind_result($sentencia, $distrito);

/* obtener el valor */
mysqli_stmt_fetch($sentencia);

printf("%s está en el distrito de %s\n", $ciudad, $distrito);

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Amersfoort está en el distrito de Utrecht


Ver también ¶

 mysqli_stmt_init() - Inicializa una sentencia y devuelve un objeto para usarlo


con mysqli_stmt_prepare
 mysqli_stmt_execute() - Ejecuta una consulta preparada
 mysqli_stmt_fetch() - Obtiene los resultados de una sentencia preparadas en
las variables vinculadas
 mysqli_stmt_bind_param() - Agrega variables a una sentencia preparada como
parámetros
 mysqli_stmt_bind_result() - Vincula variables a una sentencia preparada para el
almacenamiento de resultados
 mysqli_stmt_get_result() - Obtiene un conjunto de resultados de una sentencia
preparada

232
 mysqli_stmt_close() - Cierra una sentencia preparada

mysqli_stmt::reset
mysqli_stmt_reset
(PHP 5, PHP 7)

mysqli_stmt::reset -- mysqli_stmt_reset — Reinicia una sentencia preparada

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::reset ( void ) : bool

Estilo por procedimientos

mysqli_stmt_reset ( mysqli_stmt $stmt ) : bool

Reinicia una sentencia preparada en el cliente y servidor para consignarla


después de prepararla.

Reinicia la sentencia en el servidor, los datos enviados


usando mysqli_stmt_send_long_data(), los conjuntos de resultados no
almacenados en buffer, y los errores actuales. No limpia los vínculos o los
conjuntos de resultados. Los conjunto de resultados alacenados en buffer
serían limpiados al ejecutar la sentencia preparada (o al cerrarla).

Para preparar una sentencia con otra consulta use la


función mysqli_stmt_prepare().

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

233
Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución

mysqli_stmt::result_metadata
mysqli_stmt_result_metadata
(PHP 5, PHP 7)

mysqli_stmt::result_metadata -- mysqli_stmt_result_metadata — Devuelve los


metadatos del conjunto de resultados de una sentencia preparada

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::result_metadata ( void ) : mysqli_result

Estilo por procedimientos

mysqli_stmt_result_metadata ( mysqli_stmt $stmt ) : mysqli_result

Si una sentencia pasada a mysqli_prepare() produce un conjunto de


resultados, mysqli_stmt_result_metadata() devolverá un objeto de resultados
que puede usarse para procesar metainformación como el número total de
campos e información de campo individual.

Nota:
Este puntero del conjunto de resultados puede ser pasado como parámetro a
cualquier función basada en campos que procese los metadatos del conjunto
de resultados, tales como:
o mysqli_num_fields()
o mysqli_fetch_field()
o mysqli_fetch_field_direct()
o mysqli_fetch_fields()
o mysqli_field_count()
o mysqli_field_seek()
o mysqli_field_tell()
o mysqli_free_result()

La estructura del conjunto de resultados debería ser liberada cuando se


termine con ella, lo que se puede hacer pasándose la a mysqli_free_result()

234
Nota:
El cojunto de resultados devuelto por mysqli_stmt_result_metadata() contiene
únicamente metadatos. No contiene ningún resultado de filas. Las filas se
obtienen usando el gestor de sentencias con mysqli_stmt_fetch().
Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve un objeto de resultados o FALSE si ocurrió un error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "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')");

$sentencia = $mysqli->prepare("SELECT id, name FROM friends");


$sentencia->execute();

/* obtener el conjunto de resultados para los metadatos */


$resultado = $sentencia->result_metadata();

/* recuperar la información de campo de los metadatos del conjunto de


resultados */
$campo = $resultado->fetch_field();

printf("Nombre del campo: %s\n", $campo->name);

/* cerrar el conjunto de resultados */


$resultado->close();

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
test");

mysqli_query($enlace, "DROP TABLE IF EXISTS friends");

235
mysqli_query($enlace, "CREATE TABLE friends (id int, name varchar(20))
");

mysqli_query($enlace, "INSERT INTO friends VALUES (1,'Hartmut'), (2, '


Ulf')");

$sentencia = mysqli_prepare($enlace, "SELECT id, name FROM friends");


mysqli_stmt_execute($sentencia);

/* obtener el conjunto de resultados para los metadatos */


$resultado = mysqli_stmt_result_metadata($sentencia);

/* recuperar la información de campo de los metadatos del conjunto de


resultados */
$campo = mysqli_fetch_field($resultado);

printf("Nombre del campo: %s\n", $campo->name);

/* cerrar el conjunto de resultados */


mysqli_free_result($resultado);

/* cerrar la conexión */
mysqli_close($enlace);
?>

Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución


 mysqli_free_result() - Libera la memoria asociada a un resultado

mysqli_stmt::send_long_data
mysqli_stmt_send_long_data
(PHP 5, PHP 7)

mysqli_stmt::send_long_data -- mysqli_stmt_send_long_data — Enviar datos


en bloques

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::send_long_data ( int $param_nr , string $data ) : bool

Estilo por procedimientos

236
mysqli_stmt_send_long_data ( mysqli_stmt $stmt , int $param_nr , strin
g $data ) : bool

Permite el envío de datos de parámetros en piezas al servidor (o trozos), p.ej.


si el tamaño de un blob excede el tamaño de max_allowed_packet. Esta
función puede llamarse múltiples veces para enviar las partes de un valor de
datos de carácter o binarios de una columna, la cual debe ser del tipo de datos
TEXT o BLOB.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

param_nr

Indica qué parámetro asociar con los datos. Los parámetros son
numerados comenzando por el 0.

data

Una cadena que contiene los datos a enviar.

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$sentencia = $mysqli-
>prepare("INSERT INTO messages (message) VALUES (?)");
$null = NULL;
$sentencia->bind_param("b", $null);
$fp = fopen("messages.txt", "r");
while (!feof($fp)) {
$sentencia->send_long_data(0, fread($fp, 8192));
}
fclose($fp);
$sentencia->execute();
?>

Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución


 mysqli_stmt_bind_param() - Agrega variables a una sentencia preparada como
parámetros

237
mysqli_stmt::$sqlstate
mysqli_stmt_sqlstate
(PHP 5, PHP 7)

mysqli_stmt::$sqlstate -- mysqli_stmt_sqlstate — Devuelve el error SQLSTATE


de la operación de sentencia previa

Descripción ¶

Estilo orientado a objetos

string $mysqli_stmt->sqlstate;

Estilo por procedimientos

mysqli_stmt_sqlstate ( mysqli_stmt $stmt ) : string

Devuelve una cadena que contiene el código de error SQLSTATE de la función


más recientemente invocada de sentencia preparada que tuvo éxito o falló. El
código de error consiste en cinco caracteres. '00000' significa sin error. Los
valores están especificados por ANSI SQL y ODBC. Para una lista de valores
posibles, véase » http://dev.mysql.com/doc/mysql/en/error-handling.html.

Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve una cadena que contiene el código de error SQLSTATE del último
error. El código de error consiste en cinco caracteres. '00000' significa sin error.

Notas ¶
Nota:
Observe que aún no están referenciados todos los errores de MySQL a
SQLSTATE. El valor HY000 (error general) se utiliza para errores no
referenciados.
Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

238
<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$mysqli->query("CREATE TABLE myCountry LIKE Country");


$mysqli->query("INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";


if ($sentencia = $mysqli->prepare($consulta)) {

/* eliminar la tabla */
$mysqli->query("DROP TABLE myCountry");

/* ejecutar la sentencia */
$sentencia->execute();

printf("Error: %s.\n", $sentencia->sqlstate);

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* Abrir una conexión */
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

mysqli_query($enlace, "CREATE TABLE myCountry LIKE Country");


mysqli_query($enlace, "INSERT INTO myCountry SELECT * FROM Country");

$consulta = "SELECT Name, Code FROM myCountry ORDER BY Name";


if ($sentencia = mysqli_prepare($enlace, $consulta)) {

/* eliminar la tabla */
mysqli_query($enlace, "DROP TABLE myCountry");

239
/* ejecutar la sentencia */
mysqli_stmt_execute($sentencia);

printf("Error: %s.\n", mysqli_stmt_sqlstate($sentencia));

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Error: 42S02.
Ver también ¶

 mysqli_stmt_errno() - Devuelve el código de error de la llamada de la sentencia


más reciente
 mysqli_stmt_error() - Devuelve una descripción en forma de string del último
error de una sentencia

mysqli_stmt::store_result
mysqli_stmt_store_result
(PHP 5, PHP 7)

mysqli_stmt::store_result -- mysqli_stmt_store_result — Transfiere un conjunto


de resultados desde una sentencia preparada

Descripción ¶

Estilo orientado a objetos

mysqli_stmt::store_result ( void ) : bool

Estilo por procedimientos

mysqli_stmt_store_result ( mysqli_stmt $stmt ) : bool

Se debe llamar a mysqli_stmt_store_result() para cada consulta que produzca


con éxito un conjunto de resultados (SELECT, SHOW, DESCRIBE, EXPLAIN),
y únicamente si se quiere almacenar en buffer el conjunto de resultados

240
completo en el cliente, por lo que las llamadas subsuguientes
a mysqli_stmt_fetch() devolverán datos almacenados en buffer.

Nota:
No es necesario llamar a mysqli_stmt_store_result() para otras consultas, pero
si se hace, no perjudicará al rendimiento en ningún caso. Se puede detectar si
la consulta produjo un conjunto de resultados comprobando
si mysqli_stmt_result_metadata() devolvió NULL.
Parámetros ¶
stmt

Sólo estilo por procediminetos: Un identificador de declaraciones


devuelto por mysqli_stmt_init().

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20


";
if ($sentencia = $mysqli->prepare($consulta)) {

/* ejecutar la consulta */
$sentencia->execute();

/* almacenar el resultado */
$sentencia->store_result();

printf("Número de filas: %d.\n", $sentencia->num_rows);

/* liberar el resultado */
$sentencia->free_result();

/* cerrar la sentencia */
$sentencia->close();
}

/* cerrar la conexión */

241
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* Open a connection */
/* Abrir una conexión */
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20


";
if ($sentencia = mysqli_prepare($enlace, $consulta)) {

/* ejecutar la consulta */
mysqli_stmt_execute($sentencia);

/* almacenar el resultado */
mysqli_stmt_store_result($sentencia);

printf("Number of rows: %d.\n", mysqli_stmt_num_rows($sentencia));

/* liberar el resultado */
mysqli_stmt_free_result($sentencia);

/* cerrar la sentencia */
mysqli_stmt_close($sentencia);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Número de filas: 20.


Ver también ¶

 mysqli_prepare() - Prepara una sentencia SQL para su ejecución


 mysqli_stmt_result_metadata() - Devuelve los metadatos del conjunto de
resultados de una sentencia preparada
 mysqli_stmt_fetch() - Obtiene los resultados de una sentencia preparadas en
las variables vinculadas

242
La clase mysqli_result ¶
(PHP 5, PHP 7)
Introducción ¶

Representa el conjunto de resultados obtenidos a partir de una consulta en la


base de datos.

Historial de cambios

Historial de cambios

Versión Descripción

5.4.0 Se añadió el soporte para Iterator, y mysqli_result ahora implementa Traversable.

Sinopsis de la Clase ¶
mysqli_result implements Traversable {
/* Propiedades */
int $current_field ;
int $field_count;
array $lengths;
int $num_rows;
/* Métodos */
data_seek ( int $offset ) : bool

fetch_all ([ int $resulttype = MYSQLI_NUM ] ) : mixed

fetch_array ([ int $resulttype = MYSQLI_BOTH ] ) : mixed


fetch_assoc ( void ) : array

fetch_field_direct ( int $fieldnr ) : object


fetch_field ( void ) : object
fetch_fields ( void ) : array

fetch_object ([ string $class_name = "stdClass" [, array $params ]] ) : object


fetch_row ( void ) : mixed
field_seek ( int $fieldnr ) : bool
free ( void ) : void
}

243
mysqli_result::$current_field
mysqli_field_tell
(PHP 5, PHP 7)

mysqli_result::$current_field -- mysqli_field_tell — Obtener posición del campo


actual de un puntero a un resultado

Descripción ¶

Estilo orientado a objetos

int $mysqli_result->current_field ;

Estilo por procedimientos

mysqli_field_tell ( mysqli_result $result ) : int

Devuelve la posición del cursor de campos utilizado en la última llamada


de mysqli_fetch_field(). Se puede utilizar este valor como argumento
para mysqli_field_seek().

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

Devuelve la posición actual del cursor de campos.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_ususario", "mi_contraseña", "mun
do");

/* comprobar conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5"

244
;

if ($result = $mysqli->query($query)) {

/* Obtener información de los campos en todas las columnas */


while ($finfo = $result->fetch_field()) {

/* obtener posición del puntero de campo */


$currentfield = $result->current_field;

printf("Columna %d:\n", $currentfield);


printf("Nombre: %s\n", $finfo->name);
printf("Tabla: %s\n", $finfo->table);
printf("max. Long: %d\n", $finfo->max_length);
printf("Banderas: %d\n", $finfo->flags);
printf("Ttipo: %d\n\n", $finfo->type);
}
$result->close();
}

/* ccerrar conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

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

/* comprobar conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5"
;

if ($result = mysqli_query($link, $query)) {

/* Obtener información de campo para cada campo */


while ($finfo = mysqli_fetch_field($result)) {

/* obtener posición del puntero de campo */


$currentfield = mysqli_field_tell($result);

printf("Columna %d:\n", $currentfield);


printf("Nombre: %s\n", $finfo->name);
printf("Tabla: %s\n", $finfo->table);
printf("max. Long: %d\n", $finfo->max_length);
printf("Banderas: %d\n", $finfo->flags);
printf("Tipo: %d\n\n", $finfo->type);
}
mysqli_free_result($result);
}

245
/* cerrar conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Columna 1:
Nombre: Name
Tabla: Country
max. Long: 11
Banderas: 1
Tipo: 254

Columna 2:
Nombre: SurfaceArea
Tabla: Country
max. Long: 10
Banderas: 32769
Tipo: 4

Ver también ¶

 mysqli_fetch_field() - Retorna el próximo campo del resultset


 mysqli_field_seek() - Establecer el puntero del resultado al índice del campo
especificado

mysqli_result::data_seek
mysqli_data_seek
(PHP 5, PHP 7)

mysqli_result::data_seek -- mysqli_data_seek — Ajustar el puntero de resultado


a una fila arbitraria del resultado

Descripción ¶

Estilo orientado a objetos

mysqli_result::data_seek ( int $offset ) : bool

Estilo por procedimientos

mysqli_data_seek ( mysqli_result $result , int $offset ) : bool

246
La función mysqli_data_seek() salta a la posición offset de un puntero de
resultado.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

offset

Posición del campo. Debe estar comprendido entre cero y el número


total de filas menos uno (0..mysqli_num_rows() - 1).

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Notas ¶
Nota:
Sólo se puede usar esta función con resultados almacenados que se obtengan
mediante el uso de mysqli_store_result() o de mysqli_query().
Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
/* Abrir una conexión */
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "mund
o");

/* comprobar conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER BY Name";


if ($result = $mysqli->query($query)) {

/* saltar a la fila numero 400 */


$result->data_seek(399);

/* obtener fila */
$row = $result->fetch_row();

printf ("Ciudad: %s Código de país: %s\n", $row[0], $row[1]);

/* librar resultados */
$result->close();
}

247
/* cerrar conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* Abrir conexión */
$link = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "mu
ndo");

/* comprobar conexión */
if (!$link) {
printf("Conexión faillida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER BY Name";

if ($result = mysqli_query($link, $query)) {

/* saltar a la fila número 400 */


mysqli_data_seek($result, 399);

/* obtener fila */
$row = mysqli_fetch_row($result);

printf ("Ciudad: %s Código de país: %s\n", $row[0], $row[1]);

/* liberar resultado */
mysqli_free_result($result);
}

/* cerrar conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Ciudad: Benin City Código de país: NGA


Ver también ¶

 mysqli_store_result() - Transfiere un conjunto de resultados de la última


consulta
 mysqli_fetch_row() - Obtener una fila de resultados como un array enumerado
 mysqli_fetch_array() - Obtiene una fila de resultados como un array asociativo,
numérico, o ambos
 mysqli_fetch_assoc() - Obtener una fila de resultado como un array asociativo
 mysqli_fetch_object() - Devuelve la fila actual de un conjunto de resultados
como un objeto
 mysqli_query() - Realiza una consulta a la base de datos
 mysqli_num_rows() - Obtiene el número de filas de un resultado

248
mysqli_result::fetch_all
mysqli_fetch_all
(PHP 5 >= 5.3.0, PHP 7)

mysqli_result::fetch_all -- mysqli_fetch_all — Obtener todas las filas en un array


asociativo, numérico, o en ambos

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_all ([ int $resulttype = MYSQLI_NUM ] ) : mixed

Estilo por procedimientos

mysqli_fetch_all ( mysqli_result $result [, int $resulttype =


MYSQLI_NUM ] ) : mixed

mysqli_fetch_all() consulta todas las filas y devuelve el resultado en un array


asociativo, numérico, o ambos.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

resulttype

Este parámetro opcional define mediante una constante qué tipo de


array debe producirse a partir de los datos actuales. Los valores posibles
para este parámetro son las constantes MYSQLI_ASSOC, MYSQLI_NUM,
o MYSQLI_BOTH.

Valores devueltos ¶

Devuelve un array asociativo o numérico que almacena el resultado.

Solo Controlador Nativo de MySQL ¶

Disponible sólo con mysqlnd.

Dado que mysqli_fetch_all() devuelve todas las filas en un array en un solo


paso, puede consumir más memoria que otras funciones similares tales
como mysqli_fetch_array(), que sólo devuelve una fila cada vez a partir del

249
resultado. Por tanto, si se necesita recorrer un resultado, será necesario un
bucle que minimice el impacto en rendimiento. Por esta razón, se aconseja que
sólo se use mysqli_fetch_all() en aquellas situaciones en que el resultado se
tenga que enviar a otra capa o nivel para que lo procese.

Ver también ¶

 mysqli_fetch_array() - Obtiene una fila de resultados como un array asociativo,


numérico, o ambos
 mysqli_query() - Realiza una consulta a la base de datos

mysqli_result::fetch_array
mysqli_fetch_array
(PHP 5, PHP 7)

mysqli_result::fetch_array -- mysqli_fetch_array — Obtiene una fila de


resultados como un array asociativo, numérico, o ambos

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_array ([ int $resulttype = MYSQLI_BOTH ] )


: mixed

Estilo por procedimientos

mysqli_fetch_array ( mysqli_result $result [, int $resulttype =


MYSQLI_BOTH ] ) : mixed

Retorna un array que corresponde a la fila obtenida o NULL si es que no hay


más filas en el resultset representado por el parámetro result.

mysqli_fetch_array() es una versión extendida de la función mysqli_fetch_row().


Además de guardar la información en los índices numéricos del array
resultante, la función mysqli_fetch_array() también puede guardar la
información en índices asociativos, utilizando los nombres de los campos del
resultado como llaves.

Nota: Los nombres de los campos devueltos por esta función son sensibles a
mayúsculas y minúsculas.
Nota: Esta función define campos NULOS al valor NULL de PHP.

250
Si dos o más columnas del resultado tienen el mismo nombre de campo, la
última columna tomará precedencia y sobrescribirá la información anterior.
Para acceder a múltiples columnas con el mismo nombre, hay que usar la
versión numéricamente indexada de la fila.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

resulttype

Este parámetro opcional es una constante que indica qué tipo de array
debiera generarse con la información de la fila actual. Los valores
posibles para este parámetro son las
constantes MYSQLI_ASSOC, MYSQLI_NUM, o MYSQLI_BOTH.

Al emplear la constante MYSQLI_ASSOC esta función se comportará de


manera idéntica a mysqli_fetch_assoc(), mientras que
con MYSQLI_NUM se comportará exactamente igual que la
función mysqli_fetch_row(). La última opción MYSQLI_BOTH creará un
único array con los atributos de ambas dos.

Valores devueltos ¶

Retorna un array de strings que corresponde a la fila obtenida o NULL si no hay


más filas en el resultset.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión failed: %s\n", $mysqli->connect_error);
exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";


$result = $mysqli->query($query);

/* array numérico */
$row = $result->fetch_array(MYSQLI_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);

/* array asociativo */
$row = $result->fetch_array(MYSQLI_ASSOC);

251
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);

/* array numérico y asociativo */


$row = $result->fetch_array(MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);

/* liberar la serie de resultados */


$result->free();

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

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

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, CountryCode FROM City ORDER by ID LIMIT 3";


$result = mysqli_query($link, $query);

/* array numérico */
$row = mysqli_fetch_array($result, MYSQLI_NUM);
printf ("%s (%s)\n", $row[0], $row[1]);

/* array asociativo */
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);

/* array numérico y asociativo */


$row = mysqli_fetch_array($result, MYSQLI_BOTH);
printf ("%s (%s)\n", $row[0], $row["CountryCode"]);

/* liberar la serie de resultados */


mysqli_free_result($result);

/* cerrar la conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Kabul (AFG)
Qandahar (AFG)
Herat (AFG)
Ver también ¶

 mysqli_fetch_assoc() - Obtener una fila de resultado como un array asociativo


 mysqli_fetch_row() - Obtener una fila de resultados como un array enumerado

252
 mysqli_fetch_object() - Devuelve la fila actual de un conjunto de resultados
como un objeto
 mysqli_query() - Realiza una consulta a la base de datos
 mysqli_data_seek() - Ajustar el puntero de resultado a una fila arbitraria del
resultado

mysqli_result::fetch_assoc
mysqli_fetch_assoc
(PHP 5, PHP 7)

mysqli_result::fetch_assoc -- mysqli_fetch_assoc — Obtener una fila de


resultado como un array asociativo

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_assoc ( void ) : array

Estilo por procedimientos

mysqli_fetch_assoc ( mysqli_result $result ) : array

Retorna un array asociativo correspondiente a la fila obtenida o NULL si no


hubiera más filas.

Nota: Los nombres de los campos devueltos por esta función son sensibles a
mayúsculas y minúsculas.
Nota: Esta función define campos NULOS al valor NULL de PHP.
Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

Devuelve un array asociativo de strings que representa a la fila obtenida del


conjunto de resultados, donde cada clave del array representa el nombre de
una de las columnas de éste; o NULL si no hubieran más filas en dicho conjunto
de resultados.

253
Si dos o más columnas del resultado tienen el mismo nombre de campo, la
última columna tomará precedencia. Para acceder a la/s otra/s columna/s con
el mismo nombre, es necesario acceder al resultado ya sea usando los índices
numéricos mediante mysqli_fetch_row(), ya sea añadiéndole alias a los
campos.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* verificar la conexión */
if ($mysqli->connect_errno) {
printf("Conexión fallida: %s\n", $mysqli->connect_error);
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT


50,5";

if ($resultado = $mysqli->query($consulta)) {

/* obtener un array asociativo */


while ($fila = $resultado->fetch_assoc()) {
printf ("%s (%s)\n", $fila["Name"], $fila["CountryCode"]);
}

/* liberar el conjunto de resultados */


$resultado->free();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT


50,5";

if ($resultado = mysqli_query($enlace, $consulta)) {

254
/* obtener array asociativo */
while ($row = mysqli_fetch_assoc($resultado)) {
printf ("%s (%s)\n", $row["Name"], $row["CountryCode"]);
}

/* liberar el conjunto de resultados */


mysqli_free_result($resultado);
}

/* cerrar la conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Pueblo (USA)
Arvada (USA)
Cape Coral (USA)
Green Bay (USA)
Santa Clara (USA)

Ejemplo #3 Un ejemplo de mysqli_result comparando el uso de iterator

<?php
$c = mysqli_connect('127.0.0.1','user', 'pass');

// Usando iteradores (el soporte fue añadido con PHP 5.4)


foreach ( $c->query('SELECT user,host FROM mysql.user') as $fila ) {
printf("'%s'@'%s'\n", $fila['user'], $fila['host']);
}

echo "\n==================\n";

// Sin usar iteradores


$result = $c->query('SELECT user,host FROM mysql.user');
while ($fila = $result->fetch_assoc()) {
printf("'%s'@'%s'\n", $fila['user'], $fila['host']);
}

?>

El resultado del ejemplo sería algo similar a:

'root'@'192.168.1.1'
'root'@'127.0.0.1'
'dude'@'localhost'
'lebowski'@'localhost'

==================

'root'@'192.168.1.1'
'root'@'127.0.0.1'
'dude'@'localhost'
'lebowski'@'localhost'

255
Ver también ¶

 mysqli_fetch_array() - Obtiene una fila de resultados como un array asociativo,


numérico, o ambos
 mysqli_fetch_row() - Obtener una fila de resultados como un array enumerado
 mysqli_fetch_object() - Devuelve la fila actual de un conjunto de resultados
como un objeto
 mysqli_query() - Realiza una consulta a la base de datos
 mysqli_data_seek() - Ajustar el puntero de resultado a una fila arbitraria del
resultado

mysqli_result::fetch_field_direct
mysqli_fetch_field_direct
(PHP 5, PHP 7)

mysqli_result::fetch_field_direct -- mysqli_fetch_field_direct — Obtener los


metadatos de un único campo

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_field_direct ( int $fieldnr ) : object

Estilo por procedimientos

mysqli_fetch_field_direct ( mysqli_result $result , int $fieldnr )


: object

Devuelve un objeto que contiene la información de definición de un campo del


conjunto de resultados especificado.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

fieldnr

El número de campo. Este valor debe estar en un rango


desde 0 a número de campos - 1.

256
Valores devueltos ¶

Devuelve un objeto que contiene la información de definición del campo


o FALSE si no está disponible la información del campo especificada por fieldnr.

Atributos del objeto

Atributo Descripción

name El nombre de la columna

orgname El nombre original de la columna si se especificó un alias

table El nombre de la tabla al que pertenece el campo (si no es calculado)

orgtable El nombre original de la tabla si se especificó un alias

def El valor predeterminado de este campo, representado como una cadena

max_length El ancho máximo del campo del conjunto de resultados.

length El ancho del campo, como fue especificado en la definición de la tabla.

charsetnr El número del conjunto de caracteres del campo.

flags Un entero que representa las banderas de bits del campo.

type El tipo de datos usado por el campo

decimals El número de decimales empleados (para campos numéricos)

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, SurfaceArea from Country ORDER BY Name LIMIT


5";

if ($resultado = $mysqli->query($consulta)) {

/* Obtener la información del campo para la columna 'SurfaceArea'


*/
$info_campo = $resultado->fetch_field_direct(1);

printf("Nombre: %s\n", $info_campo->name);


printf("Tabla: %s\n", $info_campo->table);

257
printf("Longitud máx.: %d\n", $info_campo->max_length);
printf("Banderas: %d\n", $info_campo->flags);
printf("Tipo: %d\n", $info_campo->type);

$resultado->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, SurfaceArea from Country ORDER BY Name LIMIT


5";

if ($resultado = mysqli_query($enlace, $consulta)) {

/* Obtener la información del campo para la columna 'SurfaceArea'


*/
$info_campo = mysqli_fetch_field_direct($resultado, 1);

printf("Nombre: %s\n", $info_campo->name);


printf("Tabla: %s\n", $info_campo->table);
printf("Longitud máx.: %d\n", $info_campo->max_length);
printf("Banderas: %d\n", $info_campo->flags);
printf("Tipo: %d\n", $info_campo->type);

mysqli_free_result($resultado);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Nombre: SurfaceArea
Tabla: Country
Longitud máx.: 10
Banderas: 32769
Tipo: 4
Ver también ¶

 mysqli_num_fields() - Obtiene el número de campos de un resultado


 mysqli_fetch_field() - Retorna el próximo campo del resultset

258
 mysqli_fetch_fields() - Devuelve un array de objetos que representan los
campos de un conjunto de resultados

mysqli_result::fetch_field
mysqli_fetch_field
(PHP 5, PHP 7)

mysqli_result::fetch_field -- mysqli_fetch_field — Retorna el próximo campo del


resultset

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_field ( void ) : object

Estilo por procedimientos

mysqli_fetch_field ( mysqli_result $result ) : object

Retorna la definición de una columna del resultset como un objeto. Para


obtener la información de todas las columnas del resultset hay que llamar esta
función reiterativamente.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

Retorna un objeto que contiene la información de la columna o FALSE en el caso


de que la información no esté disponible.

Propiedades del objeto

Propiedad Descripción

name El nombre de la columna

orgname El nombre original de la columna en caso que se haya especificado un alias

259
Propiedades del objeto

Propiedad Descripción

table El nombre de la tabla al que este campo pertenece (si no es calculado)

orgtable El nombre original de la tabla en caso que se haya especificado un alias

def Reservado para el valor por omisión, por ahora es siempre ""

db Base de datos (desde PHP 5.3.6)

catalog El nombre del catálogo, siempre "def" (desde PHP 5.3.6)

max_length El largo máximo del campo en el resultset

length El largo del campo, tal como se especifica en la definición de la tabla.

charsetnr El número del juego de caracteres del campo.

flags Un entero que representa las banderas de bits del campo.

type El tipo de datos que se usa en este campo

decimals El número de decimales utilizado (para campos de tipo integer)

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5"
;

if ($result = $mysqli->query($query)) {

/* Obtener la información del campo de cada columna */


while ($finfo = $result->fetch_field()) {

printf("Nombre: %s\n", $finfo->name);


printf("Tabla: %s\n", $finfo->table);
printf("Largo max: %d\n", $finfo->max_length);
printf("Banderas: %d\n", $finfo->flags);
printf("Tipo: %d\n\n", $finfo->type);
}
$result->close();
}

/* cerrar la conexión */

260
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

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

/* verificar la conexión *
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT 5"
;

if ($result = mysqli_query($link, $query)) {

/* Obtener la información del campo de cada columna */


while ($finfo = mysqli_fetch_field($result)) {

printf("Nombre: %s\n", $finfo->name);


printf("Tabla: %s\n", $finfo->table);
printf("Largo max: %d\n", $finfo->max_length);
printf("Banderas: %d\n", $finfo->flags);
printf("Tipo: %d\n\n", $finfo->type);
}
mysqli_free_result($result);
}

/* cerrar la conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

Nombre: Name
Tabla: Country
Largo max: 11
Banderas: 1
Tipo: 254

Nombre: SurfaceArea
Tabla: Country
Largo max: 10
Banderas: 32769
Tipo: 4

Ver también ¶

 mysqli_num_fields() - Obtiene el número de campos de un resultado


 mysqli_fetch_field_direct() - Obtener los metadatos de un único campo
 mysqli_fetch_fields() - Devuelve un array de objetos que representan los
campos de un conjunto de resultados

261
 mysqli_field_seek() - Establecer el puntero del resultado al índice del campo
especificado

mysqli_result::fetch_fields
mysqli_fetch_fields
(PHP 5, PHP 7)

mysqli_result::fetch_fields -- mysqli_fetch_fields — Devuelve un array de


objetos que representan los campos de un conjunto de resultados

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_fields ( void ) : array

Estilo por procedimientos

mysqli_fetch_fields ( mysqli_result $result ) : array

Esta función sirve de propósito idéntico a la función mysqli_fetch_field() con la


única diferencia de que, en lugar de devolver un objeto por cada campo, las
columnas son devueltas en un array de objetos.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

Devuelve un array de objetos que contiene la información de definición de los


campos o FALSE si no hay información de campo disponible.

Propiedades del objeto

Propiedad Descripción

name El nombre de la columna

orgname El nombre original de la columna si se especificó un alias

262
Propiedades del objeto

Propiedad Descripción

table El nombre de la tabla al que pertenece el campo (si no es calculado)

orgtable El nombre original de la tabla si se especificó un alias

max_length El ancho máximo del campo del conjunto de resultados.

length El ancho del campo, en bytes, como se especificó en la definición de la tabla. Observe que este número
del valor de la definición de la tabla (caracteres), dependiendo del conjunto de caracteres que se empl
conjunto de caracteres utf8 tiene 3 bytes por carácter, por lo que varchar(10) devolverá una longitud d
aunque devuelve 10 para latin1 (10*1).

charsetnr El número del conjunto de caracteres (id) del campo.

flags Un entero que representa las banderas de bits del campo.

type El tipo de datos usado por el campo

decimals El número de decimales usado (para campos integer)

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("127.0.0.1", "root", "foofoo", "sakila");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", $mysqli->connect_error);
exit();
}

foreach (array('latin1', 'utf8') as $conj_caract) {

// Establecer el conjunto de caracteres para mostrar su impacto en


algunos valores (p.ej., longitud en bytes)
$mysqli->set_charset($conj_caract);

$consulta = "SELECT actor_id, last_name from actor ORDER BY actor_


id";

echo "======================\n";
echo "Conjunto de caracteres: $conj_caract\n";
echo "======================\n";

if ($resultado = $mysqli->query($consulta)) {

/* Obtener la información del campo para todas las columnas */


$info_campo = $resultado->fetch_fields();

foreach ($info_campo as $valor) {


printf("Nombre: %s\n", $valor->name);

263
printf("Tabla: %s\n", $valor->table);
printf("Longitud máx.: %d\n", $valor->max_length);
printf("Longitud: %d\n", $valor->length);
printf("Nº conj. caract.: %d\n", $valor->charsetnr);
printf("Banderas: %d\n", $valor->flags);
printf("Tipo: %d\n\n", $valor->type);
}
$resultado->free();
}
}
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("127.0.0.1", "mi_usuario", "mi_contraseña", "
sakila");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

foreach (array('latin1', 'utf8') as $conj_caract) {

// Establecer el conjunto de caracteres para mostrar su impacto en


algunos valores (p.ej., longitud en bytes)
mysqli_set_charset($enlace, $conj_caract);

$consulta = "SELECT actor_id, last_name from actor ORDER BY actor_


id";

echo "===============================\n";
echo "Conjunto de caracteres: $conj_caract\n";
echo "===============================\n";

if ($resultado = mysqli_query($enlace, $consulta)) {

/* Obtener la información del campo para todas las columnas */


$info_campo = mysqli_fetch_fields($resultado);

foreach ($info_campo as $valor) {


printf("Nombre: %s\n", $valor->name);
printf("Tabla: %s\n", $valor->table);
printf("Longitud máx.: %d\n", $valor->max_length);
printf("Longitud: %d\n", $valor->length);
printf("Nº conj. caract.: %d\n", $valor->charsetnr);
printf("Banderas: %d\n", $valor->flags);
printf("Tipo: %d\n\n", $valor->type);
}
mysqli_free_result($resultado);
}
}

264
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

===============================
Conjunto de caracteres: latin1
===============================
Nombre: actor_id
Tabla: actor
Longitud máx.: 3
Longitud: 5
Nº conj. caract.: 63
Banderas: 49699
Tipo: 2

Nombre: last_name
Tabla: actor
Longitud máx.: 12
Longitud: 45
Nº conj. caract.: 8
Banderas: 20489
Tipo: 253

===============================
Conjunto de caracteres: utf8
===============================
Nombre: actor_id
Tabla: actor
Longitud máx.: 3
Longitud: 5
Nº conj. caract.: 63
Banderas: 49699
Tipo: 2

Nombre: last_name
Tabla: actor
Longitud máx.: 12
Longitud: 135
Nº conj. caract.: 33
Banderas: 20489
Ver también ¶

 mysqli_num_fields() - Obtiene el número de campos de un resultado


 mysqli_fetch_field_direct() - Obtener los metadatos de un único campo
 mysqli_fetch_field() - Retorna el próximo campo del resultset

265
mysqli_result::fetch_object
mysqli_fetch_object
(PHP 5, PHP 7)

mysqli_result::fetch_object -- mysqli_fetch_object — Devuelve la fila actual de


un conjunto de resultados como un objeto

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_object ([ string $class_name =


"stdClass" [, array $params ]] ) : object

Estilo por procedimientos

mysqli_fetch_object ( mysqli_result $result [, string $class_name =


"stdClass" [, array $params ]] ) : object

mysqli_fetch_object() devolverá la fila actual del conjunto de resultados como


un objeto, donde los atributos del objeto representan los nombres de los
campos encontrados en el conjunto de resultados.

Observe que mysqli_fetch_object() establece las propiedades del objeto antes


de llamar al constructor del objeto.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

class_name

El nombre de la clase a instanciar, establecer las propiedades y


devolver. Si no se especifica se devuelve un objeto stdClass.

params

Un array opcional de parámetros para pasar al constructor de los objetos


de class_name.

266
Valores devueltos ¶

Devuelve un objeto con las propiedades de cadena que corresponden a la fila


obtenida o NULL si no hay más filas en el conjunto de resultados.

Nota: Los nombres de los campos devueltos por esta función son sensibles a
mayúsculas y minúsculas.
Nota: Esta función define campos NULOS al valor NULL de PHP.
Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT


50,5";

if ($resultado = $mysqli->query($consulta)) {

/* obtener el array de objetos */


while ($obj = $resultado->fetch_object()) {
printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
}

/* liberar el conjunto de resultados */


$resultado->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT


50,5";

267
if ($resultado = mysqli_query($enlace, $consulta)) {

/* obtener el array asociativo */


while ($obj = mysqli_fetch_object($resultado)) {
printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
}

/* liberar el conjunto de resultados */


mysqli_free_result($resultado);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Pueblo (USA)
Arvada (USA)
Cape Coral (USA)
Green Bay (USA)
Santa Clara (USA)
Ver también ¶

 mysqli_fetch_array() - Obtiene una fila de resultados como un array asociativo,


numérico, o ambos
 mysqli_fetch_assoc() - Obtener una fila de resultado como un array asociativo
 mysqli_fetch_row() - Obtener una fila de resultados como un array enumerado
 mysqli_query() - Realiza una consulta a la base de datos
 mysqli_data_seek() - Ajustar el puntero de resultado a una fila arbitraria del
resultado

mysqli_result::fetch_row
mysqli_fetch_row
(PHP 5, PHP 7)

mysqli_result::fetch_row -- mysqli_fetch_row — Obtener una fila de resultados


como un array enumerado

Descripción ¶

Estilo orientado a objetos

mysqli_result::fetch_row ( void ) : mixed

268
Estilo por procedimientos

mysqli_fetch_row ( mysqli_result $result ) : mixed

Obtiene una fila de datos del conjunto de resultados y la devuelve como un


array enumerado, donde cada columna es almacenada en un índice del array
comenzando por 0 (cero). Cada llamada subsiguiente a esta función devolverá
la siguiente fila del conjunto de resultados, o NULL si no hay más filas.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

mysqli_fetch_row() devuelve un array de cadenas que se corresponde con la


fila obtenida o NULL si no hay más filas en el conjunto de resultados.

Nota: Esta función define campos NULOS al valor NULL de PHP.


Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT


50,5";

if ($resultado = $mysqli->query($consulta)) {

/* obtener el array de objetos */


while ($fila = $resultado->fetch_row()) {
printf ("%s (%s)\n", $fila[0], $fila[1]);
}

/* liberar el conjunto de resultados */


$resultado->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

269
Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, CountryCode FROM City ORDER by ID DESC LIMIT


50,5";

if ($resultado = mysqli_query($enlace, $consulta)) {

/* obtener el array asociativo */


while ($fila = mysqli_fetch_row($resultado)) {
printf ("%s (%s)\n", $fila[0], $fila[1]);
}

/* liberar el conjunto de resultados */


mysqli_free_result($resultado);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Pueblo (USA)
Arvada (USA)
Cape Coral (USA)
Green Bay (USA)
Santa Clara (USA)
Ver también ¶

 mysqli_fetch_array() - Obtiene una fila de resultados como un array asociativo,


numérico, o ambos
 mysqli_fetch_assoc() - Obtener una fila de resultado como un array asociativo
 mysqli_fetch_object() - Devuelve la fila actual de un conjunto de resultados
como un objeto
 mysqli_query() - Realiza una consulta a la base de datos
 mysqli_data_seek() - Ajustar el puntero de resultado a una fila arbitraria del
resultado

270
mysqli_result::$field_count
mysqli_num_fields
(PHP 5, PHP 7)

mysqli_result::$field_count -- mysqli_num_fields — Obtiene el número de


campos de un resultado

Descripción ¶

Estilo orientado a objetos

int $mysqli_result->field_count;

Estilo por procedimientos

mysqli_num_fields ( mysqli_result $result ) : int

Retorna el número de campos del resultset especificado.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

El número de campos de un resultset.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

if ($result = $mysqli-
>query("SELECT * FROM City ORDER BY ID LIMIT 1")) {

271
/* determinar el número de campos del resultset */
$field_cnt = $result->field_count;

printf("El resultset tiene %d campos.\n", $field_cnt);

/* cerrar el resultset */
$result->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

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

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

if ($result = mysqli_query($link, "SELECT * FROM City ORDER BY ID LIMI


T 1")) {

/* determinar el número de campos del resultset */


$field_cnt = mysqli_num_fields($result);

printf("El resultset tiene %d campos.\n", $field_cnt);

/* cerrar el resultset */
mysqli_free_result($result);
}

/* cerrar la conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

El resultset tiene 5 campos.


Ver también ¶

 mysqli_fetch_field() - Retorna el próximo campo del resultset

272
mysqli_result::field_seek
mysqli_field_seek
(PHP 5, PHP 7)

mysqli_result::field_seek -- mysqli_field_seek — Establecer el puntero del


resultado al índice del campo especificado

Descripción ¶

Estilo orientado a objetos

mysqli_result::field_seek ( int $fieldnr ) : bool

Estilo por procedimientos

mysqli_field_seek ( mysqli_result $result , int $fieldnr ) : bool

Establece el cursor del campo al índice dado. La siguiente llamada


a mysqli_fetch_field() recuperará la definicion del campo de la columna
asociada con ese índice.

Nota:
Para buscar al principio de una fila, pase un valor de índice de cero.
Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

fieldnr

El número de campo. Este valor debe estar en el rango de 0 a número


de campos - 1.

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl
d");

273
/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT


5";

if ($resultado = $mysqli->query($consulta)) {

/* Obtener la información de campo de la 2ª columna */


$resultado->field_seek(1);
$info_campo = $resultado->fetch_field();

printf("Nombre: %s\n", $info_campo->name);


printf("Tabla: %s\n", $info_campo->table);
printf("Longitud máx.: %d\n", $info_campo->max_length);
printf("Banderas: %d\n", $info_campo->flags);
printf("Tipo: %d\n\n", $info_campo->type);

$resultado->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

<?php
$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "
world");

/* comprobar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

$consulta = "SELECT Name, SurfaceArea from Country ORDER BY Code LIMIT


5";

if ($resultado = mysqli_query($enlace, $consulta)) {

/* Obtener la información de campo de la 2ª columna */


mysqli_field_seek($resultado, 1);
$info_campo = mysqli_fetch_field($resultado);

printf("Nombre: %s\n", $info_campo->name);


printf("Tabla: %s\n", $info_campo->table);
printf("Longitud máx.: %d\n", $info_campo->max_length);
printf("Banderas: %d\n", $info_campo->flags);
printf("Tipo: %d\n\n", $info_campo->type);

274
mysqli_free_result($resultado);
}

/* cerrar la conexión */
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Nombre: SurfaceArea
Tabla: Country
Longitud máx.: 10
Banderas: 32769
Tipo: 4

Ver también ¶

 mysqli_fetch_field() - Retorna el próximo campo del resultset

mysqli_result::free
mysqli_result::close
mysqli_result::free_result
mysqli_free_result
(PHP 5, PHP 7)

mysqli_result::free -- mysqli_result::close -- mysqli_result::free_result -


- mysqli_free_result — Libera la memoria asociada a un resultado

Descripción ¶

Estilo orientado a objetos

mysqli_result::free ( void ) : void


mysqli_result::close ( void ) : void
mysqli_result::free_result ( void ) : void

Estilo por procedimientos

mysqli_free_result ( mysqli_result $result ) : void

275
Libera la memoria asociada al resultado.

Nota:
Siempre se debe liberar el resultado con mysqli_free_result(), cuando el objeto
del resultado ya no es necesario.
Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

No devuelve ningún valor.

Ver también ¶

 mysqli_query() - Realiza una consulta a la base de datos


 mysqli_stmt_store_result() - Transfiere un conjunto de resultados desde una
sentencia preparada
 mysqli_store_result() - Transfiere un conjunto de resultados de la última
consulta
 mysqli_use_result() - Inicia la recuperación de un conjunto de resultados

mysqli_result::$lengths
mysqli_fetch_lengths
(PHP 5, PHP 7)

mysqli_result::$lengths -- mysqli_fetch_lengths — Retorna los largos de las


columnas de la fila actual en el resultset

Descripción ¶

Estilo orientado a objetos

array $mysqli_result->lengths;

Estilo por procedimientos

mysqli_fetch_lengths ( mysqli_result $result ) : array

276
La función mysqli_fetch_lengths() retorna un array que contiene los largos de
cada columna de la fila actual dentro del resultset·

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

Un array de integers que representan el tamaño de cada columna (sin incluir


los caracteres null al final de éstas) . FALSE en caso de error.

mysqli_fetch_lengths() sólo es válida para la fila actual del resultset.


Retorna FALSE si se invoca antes de llamar a mysqli_fetch_row/array/object o
después de sacar todas las filas del resultado.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT * from Country ORDER BY Code LIMIT 1";

if ($result = $mysqli->query($query)) {

$row = $result->fetch_row();

/* mostrar los largos de las columnas */


foreach ($result->lengths as $i => $val) {
printf("El campo %2d tiene por Largo %2d\n", $i+1, $val);
}
$result->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

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

277
;

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

$query = "SELECT * from Country ORDER BY Code LIMIT 1";

if ($result = mysqli_query($link, $query)) {

$row = mysqli_fetch_row($result);

/* mostrar los largos de las columnas */


foreach (mysqli_fetch_lengths($result) as $i => $val) {
printf("El camp %2d tiene por Largo %2d\n", $i+1, $val);
}
mysqli_free_result($result);
}

/* cerrar la conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

El campo 1 tiene por Largo 3


El campo 2 tiene por Largo 5
El campo 3 tiene por Largo 13
El campo 4 tiene por Largo 9
El campo 5 tiene por Largo 6
El campo 6 tiene por Largo 1
El campo 7 tiene por Largo 6
El campo 8 tiene por Largo 4
El campo 9 tiene por Largo 6
El campo 10 tiene por Largo 6
El campo 11 tiene por Largo 5
El campo 12 tiene por Largo 44
El campo 13 tiene por Largo 7
El campo 14 tiene por Largo 3
El campo 15 tiene por Largo 2

mysqli_result::$num_rows
mysqli_num_rows
(PHP 5, PHP 7)

mysqli_result::$num_rows -- mysqli_num_rows — Obtiene el número de filas de


un resultado

278
Descripción ¶

Estilo orientado a objetos

int $mysqli_result->num_rows;

Estilo por procedimientos

mysqli_num_rows ( mysqli_result $result ) : int

Retorna el número de filas del resultado.

El comportamiento de mysqli_num_rows() depende de si es que se utilizan


resultsets con o sin buffer. En caso de emplearlos sin
buffer mysqli_num_rows() no retornará el número de filas correcto hasta que
todas las filas del resultado hayan sido recuperadas.

Parámetros ¶
result

Sólo estilo por procedimientos: Un conjunto de identificadores de


resultados devuelto
por mysqli_query(), mysqli_store_result() o mysqli_use_result().

Valores devueltos ¶

Retorna el número de filas del resultado.

Nota:
Si el número de filas es mayor al máximo valor de PHP_INT_MAX, el número será
retornado como un string.
Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

if ($result = $mysqli-
>query("SELECT Code, Name FROM Country ORDER BY Name")) {

/* determinar el número de filas del resultado */


$row_cnt = $result->num_rows;

printf("Result set has %d rows.\n", $row_cnt);

279
/* cerrar el resultset */
$result->close();
}

/* cerrar la conexión */
$mysqli->close();
?>

Ejemplo #2 Estilo por procedimientos

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

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Conexión fallida: %s\n", mysqli_connect_error());
exit();
}

if ($result = mysqli_query($link, "SELECT Code, Name FROM Country ORDE


R BY Name")) {

/* determinar el número de filas del resultado */


$row_cnt = mysqli_num_rows($result);

printf("El resultado tiene %d filas.\n", $row_cnt);

/* cerrar el resulset */
mysqli_free_result($result);
}

/* cerrar la conexión */
mysqli_close($link);
?>

El resultado de los ejemplos sería:

El resultado tiene 239 filas.


Ver también ¶

 mysqli_affected_rows() - Obtiene el número de filas afectadas en la última


operación MySQL
 mysqli_store_result() - Transfiere un conjunto de resultados de la última
consulta
 mysqli_use_result() - Inicia la recuperación de un conjunto de resultados
 mysqli_query() - Realiza una consulta a la base de datos

280
La clase mysqli_driver ¶
(PHP 5, PHP 7)
Introducción ¶

MySQLi Driver.

Sinopsis de la Clase ¶
mysqli_driver {
/* Propiedades */
public readonly string $client_info ;
public readonly string $client_version ;
public readonly string $driver_version ;
public readonly string $embedded ;
public bool $reconnect ;
public int $report_mode ;
/* Métodos */
embedded_server_end ( void ) : void
embedded_server_start ( bool $start , array $arguments , array $groups ) : bool
}

Propiedades ¶
client_info

El encabezado de la versión de la API Cliente

client_version

La versión de Cliente

driver_version

La versión del controlador MySQLi

embedded

Si el soporte para MySQLi Embebido está habilitado

reconnect

Permitir o evitar que vuelva a conectar (véase la Directiva INI


mysqli.reconnect)

281
report_mode

Establecer MYSQLI_REPORT_OFF, MYSQLI_REPORT_ALL o cualquier


combinación de MYSQLI_REPORT_STRICT (lanzar excepciones para los
errores), MYSQLI_REPORT_ERROR (informe de errores)
y MYSQLI_REPORT_INDEX (errores con respecto a índices). Ver
también mysqli_report().

Tabla de contenidos ¶

 mysqli_driver::embedded_server_end — Detener el servidor incrustado


 mysqli_driver::embedded_server_start — Inicializa e inicia el servidor embebido
 mysqli_driver::$report_mode — Habilita o desabilita las funciones internas de
notificación

mysqli_driver::embedded_server_end
mysqli_embedded_server_end
(PHP 5, PHP 7)

mysqli_driver::embedded_server_end -
- mysqli_embedded_server_end — Detener el servidor incrustado

Descripción ¶

Estilo orientado a objetos

mysqli_driver::embedded_server_end ( void ) : void

Estilo por procedimientos

mysqli_embedded_server_end ( void ) : void


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.

282
mysqli_driver::embedded_server_start
mysqli_embedded_server_start
(PHP 5, PHP 7)

mysqli_driver::embedded_server_start -
- mysqli_embedded_server_start — Inicializa e inicia el servidor embebido

Descripción ¶

Estilo orientado a objetos

mysqli_driver::embedded_server_start ( bool $start , array $arguments


, array $groups ) : bool

Estilo orientado a objetos

mysqli_embedded_server_start ( bool $start , array $arguments , array


$groups ) : bool

Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.

mysqli_driver::$report_mode
mysqli_report
(PHP 5, PHP 7)

mysqli_driver::$report_mode -- mysqli_report — Habilita o desabilita las


funciones internas de notificación

Descripción ¶

Estilo orientado a objetos

int $mysqli_driver->report_mode ;

Estilo por procedimientos

mysqli_report ( int $flags ) : bool

283
Una función útil para mejorar consultas durante el desarrollo de código y
pruebas. Dependiendo de las banderas, notifica errores desde llamadas a
funciones de mysqli o consultas que no usan un índice (o usan uno erróneo).

Parámetros ¶
flags

Banderas admitidas

Nombre Descripción
MYSQLI_REPORT_OFF Desactiva la notificación
MYSQLI_REPORT_ERROR Notifica errores desde llamadas a funciones de mysqli
MYSQLI_REPORT_STRICT Lanza una mysqli_sql_exception para errors en lugar de para advertenc
MYSQLI_REPORT_INDEX Notifica si no se usó un índice o si era erróneo en una consulta
MYSQLI_REPORT_ALL Establece todas las opciones (notifica todo)

Valores devueltos ¶

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios ¶
Versión Descripción

5.3.4 El cambio de modo de notificación ahora es por solicitud, en vez de por proceso.

5.2.15 El cambio de modo de notificación ahora es por solicitud, en vez de por proceso.

Ejemplos ¶

Ejemplo #1 Estilo orientado a objetos

<?php

$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "worl


d");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

/* activar la notificación */
$controlador = new mysqli_driver();
$controlador->report_mode = MYSQLI_REPORT_ALL;

try {

/* esta consulta debería notificar un error */


$resultado = $mysqli-

284
>query("SELECT Name FROM Nonexistingtable WHERE population > 50000");

/* esta consulta debería notificar un índice erróneo */


$resultado = $mysqli-
>query("SELECT Name FROM City WHERE population > 50000");

$resultado->close();

$mysqli->close();

} catch (mysqli_sql_exception $e) {

echo $e->__toString();
}
?>

Ejemplo #2 Estilo por procedimientos

<?php
/* activar la notificación */
mysqli_report(MYSQLI_REPORT_ALL);

$enlace = mysqli_connect("localhost", "mi_usuario", "mi_contraseña", "


world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
printf("Falló la conexión: %s\n", mysqli_connect_error());
exit();
}

/* esta consulta debería notificar un error */


$resultado = mysqli_query("SELECT Name FROM Nonexistingtable WHERE pop
ulation > 50000");

/* esta consulta debería notificar un índice erróneo */


$resultado = mysqli_query("SELECT Name FROM City WHERE population > 50
000");

mysqli_free_result($resultado);

mysqli_close($enlace);
?>

Ver también ¶

 mysqli_debug() - Realiza operaciones de depuración


 mysqli_dump_debug_info() - Volcado de información de depuración en el
registro
 mysqli_sql_exception
 set_exception_handler() - Establece una función de gestión de excepciones
definida por el usuario
 error_reporting() - Establece cuáles errores de PHP son notificados

285
La clase mysqli_warning ¶
(PHP 5, PHP 7)
Introducción ¶

Representa una advertencia de MySQL.

Sinopsis de la Clase ¶
mysqli_warning {
/* Propiedades */
public $message ;
public $sqlstate ;
public $errno ;
/* Métodos */
public __construct ( void )
public next ( void ) : void
}

Propiedades ¶
message

Cadena de mensaje

sqlstate

Estado de SQL

errno

Número de error

Tabla de contenidos ¶

 mysqli_warning::__construct — El propósito __construct


 mysqli_warning::next — El propósito next

286
mysqli_warning::__construct
(PHP 5, PHP 7)

mysqli_warning::__construct — El propósito __construct

Descripción ¶
public mysqli_warning::__construct ( void )
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Parámetros ¶

Esta función no tiene parámetros.

Valores devueltos ¶

mysqli_warning::next
(PHP 5, PHP 7)

mysqli_warning::next — El propósito next

Descripción ¶
public mysqli_warning::next ( void ) : void
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Parámetros ¶

Esta función no tiene parámetros.

Valores devueltos ¶

287
La clase mysqli_sql_exception ¶
(PHP 5, PHP 7)
Introducción ¶

La clase que gestiona las excepciones mysqli.

Sinopsis de la Clase ¶
mysqli_sql_exception extends RuntimeException {
/* Propiedades */
protected string $sqlstate ;
/* Propiedades heredadas */
protected string $message ;
protected int $code ;
protected string $file ;
protected int $line ;
}

Propiedades ¶
sqlstate

El estado sql con el error.

288
Alias y Funciones de MySQLi
obsoletos ¶
Tabla de contenidos ¶

 mysqli_bind_param — Alias de mysqli_stmt_bind_param


 mysqli_bind_result — Alias de mysqli_stmt_bind_result
 mysqli_client_encoding — Alias de mysqli_character_set_name
 mysqli_connect — Alias de mysqli::__construct
 mysqli_disable_reads_from_master — Deshabilita las lecturas desde el
maestro
 mysqli_disable_rpl_parse — Deshabilita el interprete RPL
 mysqli_enable_reads_from_master — Activa las lecturas desde el maestro
 mysqli_enable_rpl_parse — Habilita el interprete RPL
 mysqli_escape_string — Alias de mysqli_real_escape_string
 mysqli_execute — Alias para mysqli_stmt_execute
 mysqli_fetch — Alias de mysqli_stmt_fetch
 mysqli_get_cache_stats — Devuelve las estadísticas de la caché de Zval del
cliente
 mysqli_get_client_stats — Returns client per-process statistics
 mysqli_get_links_stats — Devolver información sobre enlaces abiertos y
almacenados en caché
 mysqli_get_metadata — Alias de mysqli_stmt_result_metadata
 mysqli_master_query — Fuerza la ejecución de una cosulta en un maestro en
una configuración maestro/esclavo
 mysqli_param_count — Alias de mysqli_stmt_param_count
 mysqli_report — Alias de mysqli_driver->report_mode
 mysqli_rpl_parse_enabled — Verifica si está habilitado el interprete RPL
 mysqli_rpl_probe — Exploración RPL
 mysqli_send_long_data — Alias de mysqli_stmt_send_long_data
 mysqli::set_opt — Alias de mysqli_options
 mysqli_slave_query — Fuerza la ejecución de una cosulta en un esclavo en
una configuración maestro/esclavo

289
mysqli_bind_param
(PHP 5 < 5.4.0)

mysqli_bind_param — Alias de mysqli_stmt_bind_param()

Descripción ¶

Esta función es un alias de mysqli_stmt_bind_param().

Advertencia
Esta función ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a
partir de PHP 5.4.0.

Ver también ¶

 mysqli_stmt_bind_param() - Agrega variables a una sentencia preparada


como parámetros

mysqli_bind_result
(PHP 5 < 5.4.0)

mysqli_bind_result — Alias de mysqli_stmt_bind_result()

Descripción ¶

Esta función es un allias de mysqli_stmt_bind_result().

Advertencia

Esta función ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a


partir de PHP 5.4.0.
Ver también ¶

 mysqli_stmt_bind_result() - Vincula variables a una sentencia preparada para el


almacenamiento de resultados

mysqli_client_encoding
(PHP 5 < 5.4.0)

mysqli_client_encoding — Alias de mysqli_character_set_name()

290
Descripción ¶

Esta función es un alias de mysqli_character_set_name().

Advertencia

Esta función ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a


partir de PHP 5.4.0.
Ver también ¶

 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 conexión

mysqli_connect
(PHP 5, PHP 7)

mysqli_connect — Alias de mysqli::__construct()

Descripción ¶

Esta función es un alias de: mysqli::__construct()

Aunque la documentación de mysqli::__construct() también incluye ejemplos


procedimentales que emplean la función mysqli_connect(), aquí se muestra un
breve ejemplo:

Ejemplos ¶

Ejemplo #1 Ejemplo de mysqli_connect()

<?php
$enlace = mysqli_connect("127.0.0.1", "mi_usuario", "mi_contraseña", "
mi_bd");

if (!$enlace) {
echo "Error: No se pudo conectar a MySQL." . PHP_EOL;
echo "errno de depuración: " . mysqli_connect_errno() . PHP_EOL;
echo "error de depuración: " . mysqli_connect_error() . PHP_EOL;
exit;
}

echo "Éxito: Se realizó una conexión apropiada a MySQL! La base de dat


os mi_bd es genial." . PHP_EOL;
echo "Información del host: " . mysqli_get_host_info($enlace) . PHP_EO
L;

291
mysqli_close($enlace);
?>

El resultado de los ejemplos sería:

Éxito: Se realizó una conexión apropiada a MySQL! La base de datos


mi_bd es genial.
Información del host: localhost via TCP/IP

mysqli_disable_reads_from_master
mysqli::disable_reads_from_master
(PHP 5 < 5.3.0)

mysqli_disable_reads_from_master -
- mysqli::disable_reads_from_master — Deshabilita las lecturas desde el
maestro

Descripción ¶

Estilo orientado a objetos

mysqli::disable_reads_from_master ( void ) : void

Estilo por procedimientos

mysqli_disable_reads_from_master ( mysqli $link ) : bool


Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli_disable_rpl_parse
(PHP 5 < 5.3.0)

mysqli_disable_rpl_parse — Deshabilita el interprete RPL

292
Descripción ¶
mysqli_disable_rpl_parse ( mysqli $link ) : bool
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli_enable_reads_from_master
(PHP 5 < 5.3.0)

mysqli_enable_reads_from_master — Activa las lecturas desde el maestro

Descripción ¶
mysqli_enable_reads_from_master ( mysqli $link ) : bool
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli_enable_rpl_parse
(PHP 5 < 5.3.0)

mysqli_enable_rpl_parse — Habilita el interprete RPL

Descripción ¶
mysqli_enable_rpl_parse ( mysqli $link ) : bool
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

293
mysqli_escape_string
(PHP 5, PHP 7)

mysqli_escape_string — Alias de mysqli_real_escape_string()

Descripción ¶

Esta función es un alias de: mysqli_real_escape_string().

mysqli_execute
(PHP 5, PHP 7)

mysqli_execute — Alias para mysqli_stmt_execute()

Descripción ¶

Esta función es un alias de mysqli_stmt_execute().

Notas ¶
Nota:
mysqli_execute() es obsoleto y será removido.
Ver también ¶

 mysqli_stmt_execute() - Ejecuta una consulta preparada

mysqli_fetch
(PHP 5 < 5.4.0)

mysqli_fetch — Alias de mysqli_stmt_fetch()

Descripción ¶

Esta función es un alias de mysqli_stmt_fetch().

Advertencia

Esta función ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a


partir de PHP 5.4.0.

294
Ver también ¶

 mysqli_stmt_fetch() - Obtiene los resultados de una sentencia preparadas en


las variables vinculadas

mysqli_get_cache_stats
(PHP 5 >= 5.3.0 and < 5.4.0)

mysqli_get_cache_stats — Devuelve las estadísticas de la caché de Zval del


cliente

Advertencia

Esta función a sido ELIMINADA a partir de PHP 5.4.0.


Descripción ¶
mysqli_get_cache_stats ( void ) : array

Devuelve un array vacío. Disponible sólo con mysqlnd.

Parámetros ¶
Valores devueltos ¶

devuelve un array vacío en caso de éxito, FALSE en caso contrario.

Historial de cambios ¶
Versión Descripción

5.4.0 Se eliminó mysqli_get_cache_stats().

5.3.0 Se agregó mysqli_get_cache_stats() como rutina improductiva.

mysqli_get_client_stats
(PHP 5 >= 5.3.0, PHP 7)

mysqli_get_client_stats — Returns client per-process statistics

Descripción ¶
mysqli_get_client_stats ( void ) : array

Returns client per-process statistics. Disponible sólo con mysqlnd.

295
Parámetros ¶
Valores devueltos ¶

Returns an array with client stats if success, FALSE otherwise.

Ejemplos ¶

Ejemplo #1 A mysqli_get_client_stats() example

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

El resultado del ejemplo sería 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

296
[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

297
[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
)
Ver también ¶

 Stats description

mysqli_get_links_stats
(PHP 5 >= 5.6.0, PHP 7)

mysqli_get_links_stats — Devolver información sobre enlaces abiertos y


almacenados en caché

Descripción ¶
mysqli_get_links_stats ( void ) : array

mysqli_get_links_stats() devuelve información sobre enlaces de MySQL


abiertos y almacenados en caché.

Parámetros ¶

Esta función no tiene parámetros.

Valores devueltos ¶

mysqli_get_links_stats() devuelve un array asociativo con tres elementos,


indicados a continuación:

total

Un integer que indica el número total de enlaces abiertos en cualquier


estado.

298
active_plinks

Un integer que representa el número de conexiones persistentes activas.

cached_plinks

Un integer que representa el número de conexiones persistentes


inactivas.

mysqli_get_metadata
(PHP 5 < 5.4.0)

mysqli_get_metadata — Alias de mysqli_stmt_result_metadata()

Descripción ¶

Esta función es un alias de mysqli_stmt_result_metadata().

Advertencia

Esta función ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a


partir de PHP 5.4.0.
Ver también ¶

 mysqli_stmt_result_metadata() - Devuelve los metadatos del conjunto de


resultados de una sentencia preparada

mysqli_master_query
(PHP 5 < 5.3.0)

mysqli_master_query — Fuerza la ejecución de una cosulta en un maestro en


una configuración maestro/esclavo

Descripción ¶
mysqli_master_query ( mysqli $link , string $query ) : bool
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

299
mysqli_param_count
(PHP 5 < 5.4.0)

mysqli_param_count — Alias de mysqli_stmt_param_count()

Descripción ¶

Esta función es un alias de mysqli_stmt_param_count().

Advertencia

Esta función ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a


partir de PHP 5.4.0.
Ver también ¶

 mysqli_stmt_param_count() - Devuelve el número de parámetros de la


sentencia dada

mysqli_report
(PHP 5, PHP 7)

mysqli_report — Alias de mysqli_driver->report_mode

Descripción ¶

Esta función es un alias de: mysqli_driver->report_mode

mysqli_rpl_parse_enabled
(PHP 5 < 5.3.0)

mysqli_rpl_parse_enabled — Verifica si está habilitado el interprete RPL

Descripción ¶
mysqli_rpl_parse_enabled ( mysqli $link ) : int
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

300
Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli_rpl_probe
(PHP 5 < 5.3.0)

mysqli_rpl_probe — Exploración RPL

Descripción ¶
mysqli_rpl_probe ( mysqli $link ) : bool
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

mysqli_send_long_data
(PHP 5 < 5.4.0)

mysqli_send_long_data — Alias de mysqli_stmt_send_long_data()

Descripción ¶

Esta función es un alias de mysqli_stmt_send_long_data().

Advertencia

Esta función ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a


partir de PHP 5.4.0.
Ver también ¶

 mysqli_stmt_send_long_data() - Enviar datos en bloques

301
mysqli::set_opt
mysqli_set_opt
(PHP 5, PHP 7)

mysqli::set_opt -- mysqli_set_opt — Alias de mysqli_options()

Descripción ¶

Esta función es un alias de mysqli_options().

mysqli_slave_query
(PHP 5 < 5.3.0)

mysqli_slave_query — Fuerza la ejecución de una cosulta en un esclavo en


una configuración maestro/esclavo

Descripción ¶
mysqli_slave_query ( mysqli $link , string $query ) : bool
Advertencia

Esta función no está documentada actualmente, solamente se encuentra


disponible la lista de parámetros.
Advertencia

Esta función ha sido declarada OBSOLETA y ELIMINADA desde PHP 5.3.0.

302
Registro de cambios ¶
A las clases/funciones/métodos de esta extensión se han realizado los
siguientes cambios.

Version Function Description

5.6.16 mysqli::real_connect Se añadió la bandera


MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
para el Controlador Nativo de MySQL

5.5.0 mysqli::commit Se añadieron los parámetros flags y name.

mysqli::options Se añadieron las opciones


MYSQLI_SERVER_PUBLIC_KEY y
MYSQLI_SERVER_PUBLIC_KEY.

mysqli::rollback Se añadieron los parámetros flags y name.

5.4.0 mysqli_get_cache_stats Se eliminó mysqli_get_cache_stats.

5.3.4 mysqli_driver::$report_mode El cambio de modo de notificación ahora es por solicitud,


en vez de por proceso.

5.3.0 mysqli_get_cache_stats Se agregó mysqli_get_cache_stats como rutina


improductiva.

mysqli::__construct Se añadió la capacidad de conexiones persistentes.

mysqli::options Se añadierons las opciones


MYSQLI_OPT_INT_AND_FLOAT_NATIVE,
MYSQLI_OPT_NET_CMD_BUFFER_SIZE,
MYSQLI_OPT_NET_READ_BUFFER_SIZE, y
MYSQLI_OPT_SSL_VERIFY_SERVER_CERT.

mysqli::query Se agregó la posibilidad de realizar consultas asíncronas.

5.2.15 mysqli_driver::$report_mode El cambio de modo de notificación ahora es por solicitud,


en vez de por proceso.

303