Diferencia entre revisiones de «Plantilla:PHP/Mysqli»
De WikiEducator
(→Mysql y su extensión mysqli para php) |
(→Clausula SELECT con query) |
||
(10 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 9: | Línea 9: | ||
<div class="slide"> | <div class="slide"> | ||
− | ;Uso básico de | + | ;Uso básico de un recurso de tipo '''''mysqli''''' |
*Recordamos que para crear una nueva instancia de una clase usamos el operador '''''new''''' | *Recordamos que para crear una nueva instancia de una clase usamos el operador '''''new''''' | ||
<source lang=php> | <source lang=php> | ||
Línea 19: | Línea 19: | ||
</source> | </source> | ||
</div> | </div> | ||
+ | |||
+ | {{MRM_Puntos clave|Title=Acciones básicas que hemos de aprender| | ||
+ | ;Para trabajar con una base de datos, siempre hemos de seguir una serie de acciones | ||
+ | |||
+ | ;1.- Concetarnos a la base de datos | ||
+ | Esto será crear una instancia de un objeto de conexión | ||
+ | ;2.- Verificar que la conexión se ha realizado | ||
+ | Si, por el motivo que fuera, no nos hemos podido conectar,generalmente: | ||
+ | 1.- Informaremos de ello | ||
+ | 2.- Cerraremos la conexión | ||
+ | ;3.- Realizaremos las operativas que necesitemos | ||
+ | Ejecutaremos sentencias SQL y recogeremos el resultado de la consulta | ||
+ | Generalmente informaremos de algo al usuario de la aplicación | ||
+ | ;4.- Cerraremos la conexión | ||
+ | Un aspecto que puede pasar desapercibido, pero muy importante | ||
+ | }} | ||
Línea 34: | Línea 50: | ||
<div class="slide"> | <div class="slide"> | ||
;Extensión Mysqli | ;Extensión Mysqli | ||
− | *El constructor de la clase puede recibir hasta 5 parámetros, de los cuales 4 se suelen usar con bastante frecuencia | + | *El '''''constructor''''' de la clase puede recibir hasta '''5 parámetros''', de los cuales '''''4''''' se suelen usar con bastante frecuencia |
#'''''$host''''' nombre o ip del equipo (null o localhost, identificaría el equipo actual).i | #'''''$host''''' nombre o ip del equipo (null o localhost, identificaría el equipo actual).i | ||
#'''''$usario''''' es el usuario de la base de datos | #'''''$usario''''' es el usuario de la base de datos | ||
Línea 53: | Línea 69: | ||
$miConexion = new mysqli ($host,$usuario,$pass,$nombreBD); | $miConexion = new mysqli ($host,$usuario,$pass,$nombreBD); | ||
if ($miConexion==null) | if ($miConexion==null) | ||
− | echo"No se ha podido crear el objeto"; | + | echo"No se ha podido crear el objeto. |
+ | Seguramente no tiene instalada la extensión mysqli. | ||
+ | Prueba a instalar apt install php-mysql "; | ||
else | else | ||
echo "Objeto creado"; | echo "Objeto creado"; | ||
Línea 59: | Línea 77: | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
+ | {{Nota|Pruena a ver el contenido del objeto con '''''var_dump''''', así podrás observar los atributos que tenemos disponibles. Son todos muy intuitivos y los iremos viendo a lo largo de este tema.}} | ||
+ | <source lang=php> | ||
+ | var_dump($miConexion); | ||
+ | </source> | ||
+ | |||
;mysqli(...) | ;mysqli(...) | ||
*Esta función retorna el recurso de la conexión. | *Esta función retorna el recurso de la conexión. | ||
Línea 64: | Línea 87: | ||
'''Un recurso a diferencia de una clase no se puede serializar para pasar entre scripts.''' | '''Un recurso a diferencia de una clase no se puede serializar para pasar entre scripts.''' | ||
}} | }} | ||
− | *Para gestionar los errores debemos de usar | + | *Para gestionar los errores de la conexión, debemos de usar los atributos: |
+ | # '''''connect_errno''''': Número o códiog del error que se ha producido en la conexión. 0 implica que no hay error. | ||
+ | # '''''connect_error''''':Descripción del error en forma de string. "" (cadena vacía) es la descripción cuando no ha habido error en la conexión. | ||
+ | de la clase '''''mysqli'''''. | ||
*El echo de que se pueda instanciar o el objeto de la clase, no implica que se haya realizado la conexión. | *El echo de que se pueda instanciar o el objeto de la clase, no implica que se haya realizado la conexión. | ||
*Este atributo aporta información sobre el error o contiene null si no se ha producido ninguno. | *Este atributo aporta información sobre el error o contiene null si no se ha producido ninguno. | ||
*En el código anterior | *En el código anterior | ||
<source lang=php> | <source lang=php> | ||
− | + | if ($miConexion->connect_error) { | |
− | + | echo "ERROR; | |
+ | echo "Error: Fallo al conectarse a MySQL debido a: \n"; | ||
+ | echo "Errno: " . $mysqli->connect_errno . "\n"; | ||
+ | echo "Error: " . $mysqli->connect_error . "\n"; | ||
+ | } | ||
</source> | </source> | ||
</div> | </div> | ||
Línea 118: | Línea 148: | ||
</div> | </div> | ||
<div class="slide"> | <div class="slide"> | ||
+ | ====Cerrar una base de datos==== | ||
+ | ;Cerrar conexión | ||
+ | *Cuando ya no vamos a utilizar más la conexión la cerramos para liberar recursos. | ||
+ | *Es importante hacer esta acción de forma explícita | ||
+ | <source lang=php> | ||
+ | $miConexion->close(); | ||
+ | </source> | ||
=====Cambiar la base de datos===== | =====Cambiar la base de datos===== | ||
Línea 132: | Línea 169: | ||
<div class="slide"> | <div class="slide"> | ||
− | ==== | + | ====Ejecutando sentencias SQL: DML (insert, delete, update, select)==== |
*En SQL sabemos que tenmos tres tipos de lenguajes DDL, DML, DCL | *En SQL sabemos que tenmos tres tipos de lenguajes DDL, DML, DCL | ||
− | * | + | *Nos vamos a centrar en el DML, Leguane de maniputación de datos |
*Podemos clasificar en dos tipos de clúsulas: | *Podemos clasificar en dos tipos de clúsulas: | ||
#las que no devuelven registros de datos (INSERT, DELETE, UPDATE) | #las que no devuelven registros de datos (INSERT, DELETE, UPDATE) | ||
Línea 194: | Línea 231: | ||
{{MRM_Pregunta| | {{MRM_Pregunta| | ||
'''''Qué pasa si en nombre de la tienda es por ejemplo Technology's house''''' | '''''Qué pasa si en nombre de la tienda es por ejemplo Technology's house''''' | ||
− | *Habría que escapar ese | + | *Habría que escapar ese carácter}} |
+ | {{MRM_Actividad|Title=Inserción de datos| | ||
+ | *Realiza una aplicación para insertar datos en una tabla llamada usuarios | ||
+ | *Insertaremos '''''Nombre''''', '''''Password''''' y edad | ||
+ | *Verificaremos la insercción accediendo a la base de datos con phpmyadmin | ||
+ | *El password que esté cifrada | ||
+ | }} | ||
+ | |||
====Escapar caracteres==== | ====Escapar caracteres==== | ||
Consiste en que de una forma automática si una cadena de caracteres tiene comillas, que estás queden escapadas para que formen parte de la cadena de caracteres y no especifique delimitación de la cadena.<br /> | Consiste en que de una forma automática si una cadena de caracteres tiene comillas, que estás queden escapadas para que formen parte de la cadena de caracteres y no especifique delimitación de la cadena.<br /> | ||
Línea 237: | Línea 281: | ||
<source lang = php> | <source lang = php> | ||
//... | //... | ||
− | $descripción = | + | $descripción = $conexion->real_scape_string("I don't want go animal's house"); |
//... | //... | ||
$consulta = "INSERT INTO acciones VALUES (1, '$descripcion')" | $consulta = "INSERT INTO acciones VALUES (1, '$descripcion')" | ||
Línea 245: | Línea 289: | ||
}} | }} | ||
− | + | {{Tip|Alternativamente al método de la clase mysqli, podemos usar con metodología estructurada la función '''''mysql_real_scape_string()}} | |
+ | {{MRM_Web| | ||
+ | https://www.php.net/manual/es/mysqli.real-escape-string.php | ||
+ | }} | ||
{{Tip|Observa el tema de las comillas, los valores de las instrucciones '''sql''' sin son de tipo '''''varchar''''' deben de ir entre comillas}} | {{Tip|Observa el tema de las comillas, los valores de las instrucciones '''sql''' sin son de tipo '''''varchar''''' deben de ir entre comillas}} | ||
Línea 312: | Línea 359: | ||
*En el segundo caso nos retornará un booleano y para leer los datos deberemos usar o '''''store_result''''' o '''''use_result''''' según veamos a continuación. | *En el segundo caso nos retornará un booleano y para leer los datos deberemos usar o '''''store_result''''' o '''''use_result''''' según veamos a continuación. | ||
</div> | </div> | ||
+ | *El método '''''query''''' con una sentencia de tipo '''''select''''' como parámetro, nos retorna un objeto de la clase mysqli_result. Esta clase (recurso) implemente la interfaz '''''Traversable''''', lo que le hace iterable en los datos que contiene. | ||
+ | *Esta clase contiene el resultado de la consulta como un conjunto de filas, pero no lo tiene como un atributo visible, si no como parte de los métodos que tenemos disponibles para obtenerlo (los metodos fetch_xxxx) | ||
<div class="slide"> | <div class="slide"> | ||
Línea 547: | Línea 596: | ||
#'''''i''''': número entero | #'''''i''''': número entero | ||
#'''''d''''': número float | #'''''d''''': número float | ||
− | #'''''b''''': valor binario (BLOB) | + | #'''''b''''': valor binario (BLOB ('''binary large object''')) |
</div> | </div> | ||
<div class="slide"> | <div class="slide"> |
Última revisión de 18:03 7 abr 2022
Esto será crear una instancia de un objeto de conexión
Si, por el motivo que fuera, no nos hemos podido conectar,generalmente: 1.- Informaremos de ello 2.- Cerraremos la conexión
Ejecutaremos sentencias SQL y recogeremos el resultado de la consulta Generalmente informaremos de algo al usuario de la aplicación
Un aspecto que puede pasar desapercibido, pero muy importante
|
- El método query con una sentencia de tipo select como parámetro, nos retorna un objeto de la clase mysqli_result. Esta clase (recurso) implemente la interfaz Traversable, lo que le hace iterable en los datos que contiene.
- Esta clase contiene el resultado de la consulta como un conjunto de filas, pero no lo tiene como un atributo visible, si no como parte de los métodos que tenemos disponibles para obtenerlo (los metodos fetch_xxxx)