php pdo conexion base de datos


pequeño codigo de muestra:

<?php
try {
$usuario='root'; $contraseña='';
$mbd = new PDO('mysql:host=localhost;dbname=apidemo', $usuario, $contraseña);
foreach($mbd->query('SELECT * from tasks') as $fila) {
print_r($fila);
}
$mbd = null;
} catch (PDOException $e) {
print "¡Error!: " . $e->getMessage() . "<br/>";
die();
}


anteriormente  (PHP 4, PHP 5) se utilizaba
mysql_select_db  pero  fue declarada obsoleta en PHP 5.5.0 y eliminada en PHP 7.0.0


profundicemos....
<?php
try {
$conn= new PDO('mysql:host=localhost;dbname=someDb', $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// run queries...
} catch (PDOException $ex) {
echo "Error: " . $e->getMessage();
}

Handling errors

  • PDO::ERRMODE_SILENT – Los errors de BD seran ignorados.
  • PDO::ERRMODE_WARNING – Los errors de BD generaran un warning pero la ejecución continuará
  • PDO::ERRMODE_EXCEPTION – Los errors de BD generarán una PDOException que será lanzada.

Usando prepared statements en PDO

los prepared statements nos permiten crear templates precompiladas de queries que luego pueden ser reutilzadas.
también podemos usar parameter binding, o enlace de parametros.

$stmt = $conn->prepare ('
INSERT INTO user (firstname, surname) VALUES (:firstname, :surname)
');
$stmt -> bindParam(':firstname', 'John');
$stmt -> bindParam(':surname', 'Smith');
$stmt -> execute();
*
********
parameter binding viene a  reemplazar el sgt codigo:

<?php
$conn= new PDO('sqlite:/path/db/users.db');
$conn->query("SELECT name FROM users WHERE id = " . $_GET['id']);
 // <-- NO!

porque está mal el código anterior?

más que malo es peligroso! ya que un hacker podria usar un tecnica llamada SQL injection y por ejemplo mandar como "id" una cadena tal que la query a ejecutar quede asi:

http://domain.com/?id=1%3BDELETE+FROM+users

*** paremeter binding nos permite sanitizar/sanear/limpiar el parámetro a ingresar al query

$stmt->bindParam(':id', $id, PDO::PARAM_INT); 
// <-- Automatically sanitized for SQL by PDO

sin embargo para operaciones de escritura, como INSERT o UPDATE
se recomienda tambien aplicarles un filtro primero. (para quitarle codigo html o de javascript)

$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); 
// <-- filter your data first 

  • PDO::FETCH_ASSOC: returns an array indexed by column name. That is, in our previous example, you need to use $row['id'] to get the id.
  • PDO::FETCH_NUM: returns an array indexed by column number. In our previous example, we’d get the id column by using $row[0] because it’s the first column.
  • PDO::FETCH_OBJ: returns an anonymous object with property names that correspond to the column names returned in your result set. For example, $row->id would hold the value of the id column.
  • PDO::FETCH_CLASS: returns a new instance of the requested class, mapping the columns of the result set to named properties in the class. If fetch_style includes PDO::FETCH_CLASSTYPE (e.g. PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE) then the name of the class is determined from a value of the first column. If you remember, we noted that PDO, at its simplest form, can map column names into classes that you define. This constant is what you would use to do that.

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable