PHP mysqli_stmt
La clase PHP mysqli_stmt representa un prepare statement de MySQL
class mysqli_stmt { /* Properties */ public readonly int|string $affected_rows; public readonly int|string $insert_id; public readonly int|string $num_rows; public readonly int $param_count; public readonly int $field_count; public readonly int $errno; public readonly string $error; public readonly array $error_list; public readonly string $sqlstate; public int $id; /* Methods */ public __construct(mysqli $mysql, ?string $query = null) public attr_get(int $attribute): int public attr_set(int $attribute, int $value): bool public bind_param(string $types, mixed &$var, mixed &...$vars): bool public bind_result(mixed &$var, mixed &...$vars): bool public close(): bool public data_seek(int $offset): void public execute(?array $params = null): bool public fetch(): ?bool public free_result(): void public get_result(): mysqli_result|false public get_warnings(): mysqli_warning|false public more_results(): bool public next_result(): bool public num_rows(): int|string public prepare(string $query): bool public reset(): bool public result_metadata(): mysqli_result|false public send_long_data(int $param_num, string $data): bool public store_result(): bool }
La clase mysqli_stmt
es por lo general inicializada desde la clase mysqli
utilizando el método prepare
.
Otra manera de inicializar mysqli_stmt
es utilizar el método stmt_init
en un objeto mysqli
En pocas palabras tenemos 2 formas distintas de inicializar la clase mysqli_stmt desde otra clase, las cuales son:
También podemos crear un objeto mysqli_stmt
usando su constructor.
Propiedades
https://blastcoding.com/php-mysqli_stmt/#propiedadesAntes de ver las propiedades, tenga en cuenta que debemos tener un objeto mysqli_stmt
. En cada propiedad que veremos a continuación, este objeto está representado con la variable $stmt
.
affected_rows
https://blastcoding.com/php-mysqli_stmt/#affected_rowsObtiene el número de filas afectadas de la última consulta MySQL realizada utilizando prepare
Sintaxis$stmt->affected_rows;
insert_id
https://blastcoding.com/php-mysqli_stmt/#insert_idDevuelve el ID generado en la operación INSERT anterior si posee una id AUTO_INCREMENT.
La operación anterior debe tener una id AUTO_INCREMENT.
Sintaxis$stmt->insert_id;
num_rows
https://blastcoding.com/php-mysqli_stmt/#num_rowsNúmero de filas pertenecientes a una consulta ejecutada anteriormente
Sintaxis$stmt->num_rows;
param_count
https://blastcoding.com/php-mysqli_stmt/#param_countEs la cantidad de parámetros pasados en la consulta hecha con prepare
Sintaxis$stmt->param_count;
field_count
https://blastcoding.com/php-mysqli_stmt/#field_countDevolverá el número de campos que se ha utilizado en la consulta prepre
Sintaxis$stmt->field_count;
errno
https://blastcoding.com/php-mysqli_stmt/#errnoCódigo de error de la consulta más reciente ejecutada sin importar si tuvo éxito o fallo. puede ver los códigos de error en https://dev.mysql.com/doc/dev/mysql-server/latest/errmsg_8h.html
Sintaxis$stmt->errno;
error
https://blastcoding.com/php-mysqli_stmt/#errorDescripción del último error obtenido luego de ejecutada una consulta(sentencia SQL)
Sintaxis$stmt->error;
error_list
https://blastcoding.com/php-mysqli_stmt/#error_listLista de errores de la última consulta ejecutada en forma de array cada error posee un array asociativo con errno, error, y sqlstate.
Sintaxis$stmt->error_list;
sqlstate
https://blastcoding.com/php-mysqli_stmt/#sqlstateerror SQLSTATE de la operación previa
Sintaxis$stmt->sqlstate;
id
https://blastcoding.com/php-mysqli_stmt/#idPrepare statement ID
Sintaxis$stmt->id;
Métodos
https://blastcoding.com/php-mysqli_stmt/#metodosAl igual que en las propiedades, representaremos el objeto mysqli_stmt
con la variable $stmt
en los recuadros de sintaxis.
__construct
https://blastcoding.com/php-mysqli_stmt/#__constructNo hay mucho que decir __construct como en toda clase es el método constructor, con este crea un objeto de clase mysqli_stmt
. Está más que claro que esta clase depende de la clase mysqli
así que debemos de crear un objeto de esa clase primero.
public mysqli_stmt::__construct(mysqli $mysqli, ?string $query = null)Sintaxis
$stmt = new mysqli_stmt($mysqli,$query);
Parámetros
$mysqli
– variable que contenga un objeto mysqli o objeto mysqli directamente, trate de no hacer esto último, sea lo más prolijo posible.
$query
– este parámetro es opcional, ya que por defecto su valor es null
attr_get
https://blastcoding.com/php-mysqli_stmt/#attr_getObtiene el valor del atributo de un prepare statement, estos cambian el comportamiento del prepare statement y pueden ser asignados con attr_set
public mysqli_stmt::attr_get(int $attribute): intSintaxis
$at = $stmt->attr_get($atribute);
Si me disculpa, pero la información del sitio oficial de PHP sobre este método es tan vaga que vamos a probar este método.
Bien gente haciendo pruebas parece que tiene q ver con mysql-stmt-attr-get de mysql puede ver más info aquí https://dev.mysql.com/doc/c-api/5.6/en/mysql-stmt-attr-get.html
Al parecer es el número de la opción que tenemos seteada.
attr_set
https://blastcoding.com/php-mysqli_stmt/#attr_setSetea los atributos de un prepared statement, al hacer esto podemos cambiar el comportamiento que posee nuestro prepare statement.
Description / Descripciónpublic mysqli_stmt::attr_set(int $attribute, int $value): bool
Este método está directamente ligado a mysql-stmt-attr-set
bind_param
https://blastcoding.com/php-mysqli_stmt/#bind_paramEste método ayuda a pasar variables a una consulta prepare statement como parametros.
Description / Descripciónpublic mysqli_stmt::bind_param(string $types, mixed &$var, mixed &...$vars): boolSintaxis
$stmt->bind_param($types,$var1,$var2, ..varN);
Parametros
$types
– es un string especificando los distintos tipos de valores vea la siguiente tabla:
Character | Description |
---|---|
i | corresponding variable has type int |
d | corresponding variable has type float |
s | corresponding variable has type string |
b | corresponding variable is a blob and will be sent in packets |
Por ejemplo, si $types ="idds"
nuestro método está esperando que las siguientes variables sean integer, float, float, string respectivamente.
$var1
, $var2
, …$varN
– distintas variables que seran los parametros en el prepare statement, el numero de variables debe ser igual al numero de caracteres en $types
Retornos
true
o false
dependiendo de si tuvo éxito o no
bind_result
https://blastcoding.com/php-mysqli_stmt/#bind_resultVincula variables a un prepare statement, el resultado de la consulta es almacenado en estas de tal modo que se pueden utilizar luego.
La sentencia ya debe haber sido ejecutada antes de utilizar este método.
Description / Descripciónpublic mysqli_stmt::bind_result(mixed &$var, mixed &...$vars): boolSintaxis
$stmt->bind_result($var1,$var2,$var3, ..$varN)
Parametros
$var1
, $var2
, $var3
, ..$varN
– estas variables serán las columnas que se desean obtener de la consulta
Retornos
Retornará true
o false
dependiendo si tuvo éxito o no.
close
https://blastcoding.com/php-mysqli_stmt/#closeCierra un prepare Statement(sentencia preparada), si hay resultados pendientes esta cerrará de todas formas, cancelando estos.
Description / Descripciónpublic mysqli_stmt::close(): boolSintaxis
$stmt->close();
data_seek
https://blastcoding.com/php-mysqli_stmt/#data_seekObtiene una fila según su parámetro $offset
de los resultados obtenidos luego de ejecutar una sentencia (prepare statement). Debemos llamar el método store_result
antes de llamar este método
public mysqli_stmt::data_seek(int $offset): voidSintaxis
$stmt->data_seek($offset);
Parametro
$offset
– dirá que fila es la que deseamos obtener, offset comienza desde cero y, por lo tanto, la fila que queramos obtener debemos restarle 1(-1)
execute
https://blastcoding.com/php-mysqli_stmt/#executeCon el método execute
ejecutaremos el prepare statement.
public mysqli_stmt::execute(?array $params = null): boolSintaxis
$stmt->execute($params);
Parámetro
$params
– este será un array con los distintos valores que irán en los parámetros del prepare statement.
Para simplificar esto puede utilizar por ejemplo ["hola",2,"parametro 3",$parametro4]
o si tienes los parámetros en distintas variables utilizar compact.
Por último, y la solución que me parece mejor es no pasarle parámetros y utilizar bind_param
antes de utilizar execute
.
Retornos
Retornará true
o false
dependiendo si la ejecución tuvo éxito o no.
fetch
https://blastcoding.com/php-mysqli_stmt/#fetchObtiene los resultados de un prepare statement luego de ser ejecutado. Este método depende de execute, ya que no podemos obtener resultados sin ejecutar la consulta.
Description / Descripciónpublic mysqli_stmt::fetch(): ?boolSintaxis
$stmt->fetch();
Retornos
En el caso de obtener los datos devolverá true
, si ocurrió un error devolverá false
y en caso de que no existan las filas devolverá null
. El último retorno puede ocurrir también si ha ocurrido un truncamiento de los datos tanto provocado como no.
free_result
https://blastcoding.com/php-mysqli_stmt/#free_resultLibera la memoria que fue asignada al usar el metodo store_result
, permitiendonos asi manejar la sentencia actual.
Este método está relacionado con store_result
.
public mysqli_stmt::free_result(): voidSintaxis
$stmt->free_result();
get_result
https://blastcoding.com/php-mysqli_stmt/#get_resultObtiene los resultados del prepare statement como un objeto mysqli_result
. Este método no debe ser usado en conjunto con store_result.
public mysqli_stmt::get_result(): mysqli_result|falseSintaxis
$result = $stmt->get_result();
get_warnings
https://blastcoding.com/php-mysqli_stmt/#get_warningsObtiene el resultado de la consulta SHOW WARNINGS
SHOW WARNINGS devuelve información sobre las distintas condiciones (errors, warnings, y notes)
Ejemplo de SHOW WARNINGS en MYSQLmysql> SHOW WARNINGS\G *************************** 1. row *************************** Level: Warning Code: 1265 Message: Data truncated for column 'b' at row 1 *************************** 2. row *************************** Level: Warning Code: 1048 Message: Column 'a' cannot be null *************************** 3. row *************************** Level: Warning Code: 1264 Message: Out of range value for column 'a' at row 3 3 rows in set (0.00 sec)Description / Descripción
public mysqli_stmt::get_warnings(): mysqli_warning|falseSintaxis
$warnings = $stmt->get_warnings();
more_results
https://blastcoding.com/php-mysqli_stmt/#more_resultsComprueba si existen más resultados de consultas si se ha hecho una consulta multiple
Description / Descripciónpublic mysqli_stmt::more_results(): bool
next_result
https://blastcoding.com/php-mysqli_stmt/#next_resultObtiene el próximo resultado de una consulta múltiple
Description / Descripciónpublic mysqli_stmt::next_result(): bool
num_rows
https://blastcoding.com/php-mysqli_stmt/#num_rowsNúmero de filas devueltas en la consulta, necesitarás de store_result para poder utilizar este método.
Description / Descripciónpublic mysqli_stmt::num_rows(): int|string
prepare
https://blastcoding.com/php-mysqli_stmt/#preparePrepara un prepare statement(sentencia) para su ejecución, En caso de que la sentencia posea parametros estos han de ser indicados con el signo ? estos tambien son llamados placeholders.
Description / Descripciónpublic mysqli_stmt::prepare(string $query): boolSentencia
$stmt->prepare($query);
Parametro
$query -esta será la consulta a ser ejecutada, por ejemplo:"SELECT calle, numero, barrio FROM direcciones WHERE calle=?"
recuerde que ? indica el parametro que le pasaremos con bind_param o en la ejecución execute
reset
https://blastcoding.com/php-mysqli_stmt/#resultResetea un prepare statement llevando a si al estado anterior antes de correr el prepare.
Description / Descripciónpublic mysqli_stmt::reset(): bool
Retornos
true en caso de poder resetear, false en caso de error
result_metadata
https://blastcoding.com/php-mysqli_stmt/#result_metadataRetorna un objeto mysqli_result
con la metadata de un prepare statement(sentencia). La sentencia debe ser ejecutada con execute antes para obtener un resultado antes de utilizar result_metadata
.
public mysqli_stmt::result_metadata(): mysqli_result|falseSintaxis
$stmt->result_metadata();
Retornos
En caso de éxito devolverá un objeto mysqli_result
false
en caso de fallo
send_long_data
https://blastcoding.com/php-mysqli_stmt/#send_long_dataNos permite mandar la data en bloques(secciones) de parámetros de nuestro prepare statement
Description / Descripciónpublic mysqli_stmt::send_long_data(int $param_num, string $data): boolSintaxis
$stmt->send_long_data($param,$data);
Retornos
Retorna true
en caso de poder mandar la data false
en caso de fallo.
store_result
https://blastcoding.com/php-mysqli_stmt/#store_resultAlmacena el resultado de un prepare statement en un buffer interno, estos resultados pueden ser obtenidos con fetch
public mysqli_stmt::store_result(): boolSintaxis
$stmt->store_result();
Retornos
true
si tiene éxito false
si falla.