====== FluentPDO ======
===== Ressources =====
* [[https://www.sitepoint.com/getting-started-fluentpdo/|Getting started]]
* [[https://github.com/envms/fluentpdo|Github]]
===== Utilisation basique =====
==== Connexion ====
// Configuration
$db_dsn="pgsql:host=localhost;port=5432;dbname=myapp";
$db_user="myapp";
$db_pwd="mysecret";
$db_options=array();
try {
$pdo = new PDO($db_dsn, $db_user, $db_pwd, $db_options);
$fpdo = new FluentPDO($pdo);
}
catch(Exception $e) {
die("Fail to connect to DB (DSN : '$db_dsn') : ".$e->getMessage());
}
===== SELECT =====
$result = $fpdo -> from('matable')
-> where(
array (
'col1 = ?' => 'val1',
'col2 < ?' => 'val2',
)
)
-> orderBy('col1 ASC')
-> limit(10)
-> offset(30)
-> execute();
if ($result !== false) {
// Retourner le premier enregistrement
return $result -> fetch();
// Ou retourner tous les enregistrements
return $result -> fetchAll();
}
===== INSERT INTO =====
$result = $fpdo -> insertInto('matable')
-> values(
array (
'col1' => 'val1',
'col2' => 'val2',
)
)
-> execute();
if ($result !== false) {
return true; // Ou return $result pour récupérer l'ID de l'objet inséré
}
===== UPDATE =====
$result = $fpdo -> update('matable')
-> set(
array (
'col1' => 'val1',
'col2' => 'val2',
)
)
-> where('username', 'toto')
-> execute();
if ($result !== false) {
return true;
}
===== DELETE =====
$result = $fpdo -> deleteFrom('matable')
-> where('username', 'toto')
-> execute();
if ($result !== false) {
return true;
}
===== Quelques mémos de cas particuliers =====
==== SELECT autre que * ====
$fpdo -> from('matable')
-> select(null)
-> select(
array (
'col1',
'col2',
)
)
-> where([...])
-> execute();
==== SELECT count(*) ====
$result = $fpdo -> from('matable')
-> select(null)
-> select('count(*) as count')
-> where([...])
-> execute();
if ($result !== False) {
$row = $result -> fetch();
return $row['count'];
}
==== SELECT ~ FROM ~ WHERE ~ IN (~) ====
$fpdo -> from('matable')
-> where('status', array('val1', 'val2'))
-> execute();
==== SELECT ~ FROM ~ WHERE ~ AND (~ OR ~ OR ~) ====
$where = array (
'col1' => 'val1',
'col2 > ?' => 12,
);
$query = $fpdo -> from('matable')
-> where($where);
$patterns_where = array (
'id = ?' => 15,
'mail' => 'toto@exemple.fr',
'tel LIKE ?' => '%15%',
);
call_user_func_array(array($query, 'where'), array_merge(array('('.implode(' OR ', array_keys($patterns_where)).')'), array_values($patterns_where)));
$result = $query -> orderBy($orderby)
-> limit($limit)
-> offset($offset)
-> execute();
==== Utilisation d'une méthode d’agrégation ====
$fpdo -> update('users')
-> set(
array (
'password' => new FluentLiteral("crypt('".addslashes($password)."', gen_salt('bf'))"),
)
)
-> where('username', 'toto')
-> execute();
==== Debug des requêtes ====
$fpdo -> debug = function ($q) {
$time = sprintf('%0.3f', $q->getTime() * 1000) . ' ms';
$rows = ($q->getResult()) ? $q->getResult()->rowCount() : 0;
$query = $q->getQuery();
$msg = "# DB query ($time; rows = $rows) : $query";
$parameters = $q->getParameters();
if ($parameters) {
if (is_array($parameters)) {
$msg .= "\n# Parameters: '" . implode("', '", $parameters) . "'";
}
else {
$msg .= "\n# Parameters: '" . varDump($parameters) . "'";
}
}
echo $msg."\n";
};