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
$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)
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 theid
. - 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 theid
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