Last active
November 15, 2022 16:53
-
-
Save alexlatam/229e606131c54ff6510e67d5006af273 to your computer and use it in GitHub Desktop.
PHP Query with MySqli and PDO and Transactions using PDO
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?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