1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| <?php
declare(strict_types=1);
//namespace classes\MYPDO;
namespace classes;
/**
* TUTORIAL DVP SUR LE CONCEPT MVC : MODÈLE-VUE-CONTRÔLEUR
* @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7786/developpement-selon-l-approche-mvc-modele-vue-controleur-retour-theorie/
* @link https://www.developpez.net/forums/blogs/32058-rawsrc/b7804/developpement-selon-lapproche-mvc-modele-vue-controleur-cas-pratique/
*/
class MYPDO
extends \PDO
{
/**
* @var \PDO
*/
private static $pdo = null;
public function __construct()
{
if (self::$pdo === null) {
self::connect();
}
return self::$pdo;
}
/**
* @param string scheme Ex: mysql pgsql...
* @param string $host Adresse IP du serveur
* @param string $database Nom de la base de données
* @param string $user Nom de l'utilisateur
* @param string $pwd Mot de passe de la connexion
* @param string $port Numéro du port pour la connexion
*/
private static function connect(string $scheme = DB_SCHEME, string $host = DB_HOST, string $database = DB_NAME,
string $user = DB_USER, string $pwd = DB_PWD, string $port = DB_PORT)
{
$dsn = "{$scheme}:host={$host};dbname={$database};";
if ((int)($port)) {
$dsn .= "port={$port};";
}
try {
self::$pdo = new \PDO($dsn, $user, $pwd, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_EMULATE_PREPARES => false
]);
} catch (\PDOException $e) {
throw $e;
}
}
/**
* @param mixed $sql
* @param mixed $values [:tag => value] si pas de values, mettre [] en argument
* @param mixed $types [:tag => PDO::PARAM_XXX] si tag absent alors PDO::PARAM_STR
*
* @return array null si erreur
*/
public function select($sql, array $values, array $type = []): ?array
{
try {
$stmt = self::$pdo->prepare($sql);
foreach ($values as $tag => $v) {
$stmt->bindValue($tag, $v, $type[$tag] ?? \PDO::PARAM_STR);
}
$exec = $stmt->execute();
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
} catch (\PDOException $e) {
error_log('PDO::select - '.$e->getMessage());
return null;
}
}
} |
Partager