Diferencia entre revisiones de «Usuario:ManuelRomero/DAW/distancia/BD»

De WikiEducator
Saltar a: navegación, buscar
(Liberarlo)
(La clase mysqli_stmt: Consultas preparadas)
Línea 87: Línea 87:
  
  
===La clase mysqli_stmt: Consultas preparadas===
+
===La clase mysqli_stmt===
 +
*Esta clase permiete gestionar las '''Consultas preparadas'''
 
*Es otra manera de ejecutar las sentencias
 
*Es otra manera de ejecutar las sentencias
 
*Consiste en crear una instancia de la clase '''''mysqli_stmt'''''
 
*Consiste en crear una instancia de la clase '''''mysqli_stmt'''''

Revisión de 10:03 24 nov 2014

EXTENSIONES DE PHP PARA TRABAJAR CON BASES DE DATOS

Clases con las que vamos a trabajar

Extension MYSQLI
 ;mysqli
 ;mysql_result
 ;mysql_stmt
Extension PDO
 ;PDO
 ;PDOStatemnet

Extensión MYSQLI

  • Trabajaremos orientado a Objetos, con la clase mysqli

Clase mysqli

Obtener una instancia

  • Objeto que me permitirá interactuar con la base de datos
$conexion = new mysqli(parametros);
$conexion  Será una instancia de la clase mysqli
  • Alias del constructor
$conexion= mysqli_connect(parametros)
  • En ambos casos parámetros, no son obligatorios, pero en algún momento necesarios si quiero operar con una base de datos necesito saberlo;
  • Si no lo aportamos ahora, después con los métodos correspondientes
$host, $usuario, $pass, $bd

Verificar conexión

  • Con los atributos connect_error y connect_errno de la clase mysqli
    • Si su valor es null todo ok, si no contienen la información del error producido
$conexion = new mysqli(...);
$conexion->connect_error ? Echo 'error $conexion->connect_error' : echo 'Conectado';

Operaciones con la base de datos

De tipo INSERT DELETE UPDATE
bool  $conexion->query($sentencia)
  • El método retorna bool que indica si se ha realizado de forma correcta o no la sentencia.
  • no indica el número de filas afectadas (puede dar true y no haber afectado a ninguna fila por ejemplo un delete o un update).
  • Verificar número de tuplas afectadas por la setencia
    • Atributo affect_rows de la clase mysqli
$conexion = new mysqli(...);
$sentencia = “INSERT INTO …...$conexion->query($sentencia) ? Echo ·Se han insertado $conexion->affect_rows' : echo 'Error insertando';
De tipo SELECT
mysqli_result $conexion->query ($consulta);
  • En este caso el método retorna un objeto de la case mysqli_result null en caso de no haberse podido realizar.

Clase mysqli_result

  • Un objeto de esta clase contiene el resultado de una consulta junto con un puntero para pdoer recorrelo, lo que conocíamos como cursor.

Instanciar mysqli_result

  • resultado del método query de la clase mysqli con una consulta.
$resultado = $conexion->query ($consulta);

Recorrelo

  • Tenemos diferentes formas de hacer lo mismo
  • Métodos fetch_assoc(), fetch_row(), fetch_object() de la clase mysqli_result
  • Hacen lo mismo, obteniendo el resultado de diferente manera
  • Recuperar la fila del resultado de la consulta que actualmente está apuntada y avanzan el puntero a la siguiente fila si la hay.
  • Cada método retorna esa fila de una manera
fetch_array()  lo retorna como un array asociativo o indexado
fetch_row()  lo retorna como un array indexado
fetch_assoc() lo retorna como un array asociativo
fetch_object() lo retorna como un objeto

Liberarlo

  • Método free() de la clase mysqli_result.
 Para mi, muy importante liberar las cosas que ya no se usen, es como recoger la habitación,   
mientras quepan cosas podemos seguir almacenanado ropa en la cama, pero cuando ya no quepa más ... 
$conexion = new mysqli(...)
$consulta = "select ...";
$resultado =  $conexion->query ($consulta);
while ($fila = $resultado->fetch_array()){
   echo ·valor del campo primero $fila[1]";
}
$resultado->free();
$conexion ->close();


La clase mysqli_stmt

  • Esta clase permiete gestionar las Consultas preparadas
  • Es otra manera de ejecutar las sentencias
  • Consiste en crear una instancia de la clase mysqli_stmt

Crear una instancia

$conexion= new mysqli(...);
$consultaPreparada = $conexion->stmt_init()
Consultas preparadas de tipo INSERT UPDATE Y DELETE
  • Vamos a ver con parámetros, sin parámetros es igual pero sin usar ? Y sin asignar bind_param()
$conexion = new mysqli(...); //Crea la conexion
$sentencia = 'insert.... where campo = ? and otroCampo=?';  //cadena con la sentencia
mysql_stmt $consultaPreparada = $conexion->stmt_init(); //Crea el objeto mysql_stmt
bool $consultaPreparada->prepare($sentencia); //Prepara la consulta bool indica si lo ha hecho
bool $consultaPreparada->bind_param('ss',$valor_cmpo,$valor_otroCampo); //Asigna los valores a los parámetros de la cadena especificados con ?. Bool indica si lo hace o no
bool $consultaPreparada->execute(); Ejectua la sentencia. Bool indica si lo hace o no
int $consultaPreparada->affected_rows; //Atributo con las filas afectadas.
Liberar la consulta
$consultaPreparada->close(); //Libera el recurso
Consultas preparadas de tipo SELECT
  • Se usan los mismos métodos.
  • Se añaden para recuperar los valores.
$conexion = new mysqli(...); //Crea la conexion
$sentencia = 'select.... where campo = ? and otroCampo=?';  //cadena con la sentencia
mysql_stmt $consultaPreparada = $conexion->stmt_init(); //Crea el objeto mysql_stmt
bool $consultaPreparada->prepare($sentencia); //Prepara la consulta bool indica si lo ha hecho
bool $consultaPreparada->bind_param('ss',$valor_cmpo,$valor_otroCampo); //Asigna los valores a los parámetros de la cadena especificados con ?. Bool indica si lo hace o no
bool $consultaPreparada->bind_result('$campo1, ..,'$campon');//Preparamos las variables donde se van a asignar los valores de los diferentes campos para cada fila obtenida de hacer un fetch(). bool indica si se ha ejecutado correctamente el método.
Bool $consultaPreparada->store_result();//Almacena el resultado en memoria. Importante si quiero consultar por ejemplo $consultaPrepare->nun_rows para ver  filas afectadas
int $consultaPreparada->num_rows; Atributo con las filas que ha retornado la consulta
bool $consultaPreparada->execute(); Ejectua la sentencia. Bool indica si lo hace o no
bool  $consultaPreparada->fetch() //Extrae una fila del último resultado select y asigna a cada variable especificado en bind_result cada valor de la fila . Bool true o folase (ok o error) y null si no hay más filas que extraer
bool $consultaPreparada->execute(); Ejectua la sentencia. Bool indica si lo hace o no