Skip to content

Instantly share code, notes, and snippets.

@alexlatam
Last active November 15, 2022 16:53
Show Gist options
  • Save alexlatam/229e606131c54ff6510e67d5006af273 to your computer and use it in GitHub Desktop.
Save alexlatam/229e606131c54ff6510e67d5006af273 to your computer and use it in GitHub Desktop.
PHP Query with MySqli and PDO and Transactions using PDO
<?php
/*------------------------- \Mysqli -------------------------*/
/*------------------------- \Mysqli -------------------------*/
// Conexion con DB, usando la clase global(propia del lenguaje) mysqli
$mysqli_conection = new \mysqli($this->server, $this->username, $this->password, $this->database);
// Comprobar conexión genero error
if ($mysqli->connect_errno)
die("Falló la conexión: {$mysqli->connect_error}");
/******* Realizando una query normal *******/
$result = $mysqli_conection->query("INSERT INTO users (name, lastname) VALUES( $name, $lastname);");
/******* Consulta Preparada - evitando Inyeccion SQL *******/
// Preparo la consulta, en vez de colocar directamente los datos, coloco un signo ? por cada variable
$statment = $mysqli_conection->prepare("INSERT INTO users (name, lastname, description) VALUES( ?, ?, ?);");
// Enlazo las variables con la consulta
// El primer parametro recibe un string con los tipos de cada parametro
// i: si el parametro es de tipo entero
// d: si el parametro es de tipo double
// s: si el parametro es de tipo string
// b: si el parametro es de tipo blob o se envia en paquetes
// revisr la documentacion => https://www.php.net/manual/en/mysqli-stmt.bind-param.php
// Los siguientes parametros con los valores que iran en el SQL, en orden
$statment->bind_param("sss", $name, $lastname, $description);
// Ejecuto la consulta
$result = $statment->execute();
/*------------------------- \PDO -------------------------*/
/*------------------------- \PDO -------------------------*/
// Conexion con DB, usando la clase global(propia del lenguaje) PDO
$pdo_conection = new \PDO("mysql:host=$this->server;dbname=$this->database", $this->username, $this->password);
/******* Realizando una query normal *******/
$result = $pdo_conection->exec("INSERT INTO users (name, lastname) VALUES( $name, $lastname);");
/******* Consulta Preparada - evitando Inyeccion SQL *******/
// Preparo la consulta, en vez de colocar directamente los datos, coloco 'placeholders' antecedida de :
$statment = $pdo_conection->prepare("INSERT INTO users (name, lastname, description) VALUES( :name, :lastname, :description);");
// Ejecuto la consulta sustituyendo los placeholders por las variables
$result = $statment->execute([
":name" => $name_var,
":lastname" => $lastname_var,
":description" => $description_var
]);
/******* Consulta usando bindParams - Otra forma de hacer consultas usando PDO *******/
// Preparo la consulta, en vez de colocar directamente los datos, coloco 'placeholders' antecedida de :
$statment = $pdo_conection->prepare("INSERT INTO users (name, lastname, description) VALUES( :name, :lastname, :description);");
// Enlazo los placeholders con las variables correspondientes
$statment->bindParam(":name", $name_var);
$statment->bindParam(":lastname", $lastname_var);
$statment->bindParam(":description", $description_var);
// Ejecuto la consulta
$result = $statment->execute();
/******* Consulta usando bindValue - Otra forma de hacer consultas usando PDO *******/
// Preparo la consulta, en vez de colocar directamente los datos, coloco 'placeholders' antecedida de :
$statment = $pdo_conection->prepare("INSERT INTO users (name, lastname, description) VALUES( :name, :lastname, :description);");
// Enlazo los placeholders con las variables correspondientes
$statment->bindValue(":name", $name_var);
$statment->bindValue(":lastname", $lastname_var);
$statment->bindValue(":description", $description_var);
// Ejecuto la consulta
$result = $statment->execute();
/******* Obtener registros de BD - fetchAll ********/
// Preparo la consulta, en vez de colocar directamente los datos, coloco 'placeholders' antecedida de :
$statment = $pdo_conection->prepare("SELECT * FROM users;");
// Ejecuto la consulta
$statment->execute();
// Obtengo los registros en forma de array mixto, arreglo con indices numericos e indices con nombres
// En este caso los registros estaran duplicados
$results = $statment->fetchAll();
// Recorro todos los registros
foreach ($results as $result)
echo "Este es un value {$result['filed']}";
/******* Obtener UN SOLO registro de BD - fetch *******/
// Preparo la consulta, en vez de colocar directamente los datos, coloco 'placeholders' antecedida de :
$statment = $pdo_conection->prepare("SELECT * FROM users WITH 'id'=:id;");
// Ejecuto la consulta
$statment->execute([
":id" => $id_var
]);
// Obtengo el registro en forma de un objeto Json
$result = $statment->fetch();
// Recorro todos los registros
echo "Este es un value {$result['filed']}";
/*------------------------- \PDO Transactions -------------------------*/
/*------------------------- \PDO Transactions -------------------------*/
// Transacciones: cómo revertir una consulta
// Inicio la transaccion
$statement = $pdo_conection->beginTransaction();
// realizo la consulta(s) a dase de datos
$statement = $pdo_conection->exec("INSERT INTO .......");
$statement = $pdo_conection->exec("UPDATE .......");
// Realizo una condicion en caso de todo bien
// La condicion puede ser si se tiene el id del registro creado
if(condition_success)
// Si todo fue bien, finalizamos la trasaccion
$pdo_conection->commit();
else
// Si algo salio mal, cancelamos la transaccion
$pdo_conection->rollBack();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment