Edi 2 PHP - Mysql - Pdo
Edi 2 PHP - Mysql - Pdo
PHP-MYSQL
Hablaremos sobre la forma de trabajar con datos de una Base de Datos
de MySql desde PHP
El primer paso es tener creada la Base de Datos con las tablas que se desean acceder desde
PHP.
Para esto creamos la Base de Datos “colores_php”
Luego creamos una tabla llamada colores con los campos: id(clave), color y descripción.
Insertamos algunos datos:
(1,"Primario","Color azul");
(2,"Danger","Rojo");
Ya tenemos creadas las Base de Datos y la tabla que necesitamos para conectarnos desde
PHP
Conexión desde PHP:
Se puede obtener el modo de conexión desde la página de PHP donde se observan varias
alternativas.
El link es: https://www.php.net/manual/es/pdo.connections.php
Conexión desde PHP:
PDO:
PDO significa PHP Data Objects, Objetos de Datos de PHP, una extensión para acceder a
bases de datos.
PDO permite acceder a diferentes sistemas de bases de datos con un controlador específico
(MySQL, SQLite, Oracle...) mediante el cual se conecta. Independientemente del sistema
utilizado, se emplearán siempre los mismos métodos, lo que hace que cambiar de uno a
otro resulte más sencillo.
// Prepare
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre,
ciudad) VALUES (?, ?)");
// Bind
// Bind $nombre = "Martha";
$nombre = "Peter"; $ciudad = "Cáceres";
$ciudad = "Madrid"; $stmt->bindParam(1, $nombre);
$stmt->bindParam(1, $nombre); $stmt->bindParam(2, $ciudad);
$stmt->bindParam(2, $ciudad);
// Execute
// Excecute $stmt->execute();
$stmt->execute();
Conexión desde PHP:
PDOStatement: Utilizando variables para los valores
// Prepare
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre,
ciudad) VALUES (:nombre, :ciudad)");
// Bind
// Bind
$nombre = "Anne";
$nombre = "Charles";
$ciudad = "Lugo";
$ciudad = "Valladolid";
$stmt->bindParam(':nombre',
$stmt->bindParam(':nombre', $nombre); $nombre);
$stmt->bindParam(':ciudad', $ciudad); $stmt->bindParam(':ciudad',
$ciudad);
// Excecute // Execute
$stmt->execute(); $stmt->execute();
Conexión desde PHP:
PDOStatement: Utilizando array para los valores
// Prepare:
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre, ciudad) VALUES (:nombre, :ciudad)");
$nombre = "Luis";
$ciudad = "Barcelona";
// Bind y execute:
if($stmt->execute(array(':nombre'=>$nombre, ':ciudad'=>$ciudad))) {
echo "Se ha creado el nuevo registro!";
}
Conexión desde PHP:
PDOStatement: Diferencia entre bindParam() y bindValue()
Con bindParam() la variable es enlazada como una referencia y sólo será evaluada cuando se llame a
execute():
// Prepare:
$stmt = $dbh->prepare("INSERT INTO Clientes (nombre) VALUES (:nombre)");
$nombre = "Morgan";
// Bind
$stmt->bindParam(':nombre', $nombre); // Se enlaza a la variable $nombre
// Si ahora cambiamos el valor de $nombre:
$nombre = "John";
$stmt->execute(); // Se insertará el cliente con el nombre John
Conexión desde PHP:
PDOStatement: Diferencia entre bindParam() y bindValue()
En la práctica bindValue() se suele usar cuando se tienen que insertar datos sólo una vez, y bindParam()
cuando se tienen que pasar datos múltiples (desde un array por ejemplo).
Conexión desde PHP:
PDOStatement: Consultar datos con PDO
La consulta de datos se realiza mediante PDOStatement::fetch, que obtiene la siguiente fila de un conjunto de
resultados. Antes de llamar a fetch (o durante) hay que especificar como se quieren devolver los datos:
Entre otros podemos encontrar:
PDO::FETCH_ASSOC: devuelve un array indexado cuyos keys son el nombre de las columnas.
PDO::FETCH_BOUND: asigna los valores de las columnas a las variables establecidas con el método
PDOStatement::bindColumn.
El método query() ejecuta la sentencia directamente y necesita que se escapen los datos
adecuadamente para evitar ataques SQL Injection y otros problemas.
execute() ejecuta una sentencia preparada lo que permite enlazar parámetros y evitar tener que
escapar los parámetros. execute() también tiene mejor rendimiento si se repite una sentencia
múltiples veces, ya que se compila en el servidor de bases de datos sólo una vez.
$stmt = $dbh->query("SELECT * FROM Clientes");
$clientes = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach ($clientes as $cliente){
echo $cliente->nombre . "<br>";
}
Se cambia prepare por query y se quita el execute.
Conexión desde PHP:
PDOStatement: Otras funciones de utilidad
PDO::exec(). Ejecuta una sentencia SQL y devuelve el número de filas afectadas. Devuelve el número
de filas modificadas o borradas, no devuelve resultados de una secuencia SELECT: