122 lines
3.9 KiB
PHP
Executable File
122 lines
3.9 KiB
PHP
Executable File
<?php
|
|
function dynRequete_tableaux( $tableName, $fields = [], $conditions = [], $fieldNamesToGlobal = [], $orderBy ='', $ficAppelant = '', $afficherMsg = 0, $localDebug = 0) {
|
|
|
|
// fieldNamesToGlobal => tableau associatif avec champsDelaDB => variablePHP de recup
|
|
|
|
global $admMsg, $admMsgClass, $idPdo, $debugMsg; // Déclaration unique des variables globales
|
|
|
|
$startTime = microtime(true); // Pour mesurer le temps d'exécution
|
|
$reqSelect = '';
|
|
$result = null;
|
|
|
|
if (!empty($fieldNamesToGlobal)) {
|
|
foreach ($fieldNamesToGlobal as $fieldName => $globalVarName) {
|
|
global $$globalVarName; // Déclare chaque variable en global
|
|
}
|
|
}
|
|
|
|
// Gestion des backticks sauf si le champ est *
|
|
$escapedFields = array_map(function($field) { return ($field === '*') ? '*' : "`$field`"; }, $fields);
|
|
|
|
$fieldsStr = implode(", ", $escapedFields);
|
|
$reqSelect = "SELECT " .$fieldsStr. " FROM `" .$tableName."`";
|
|
|
|
// Ajout des conditions WHERE si elles existent
|
|
$bindParams = [];
|
|
if (!empty($conditions) && is_array($conditions)) {
|
|
$whereClauses = [];
|
|
foreach ($conditions as $key => $value) {
|
|
$whereClauses[] = "`$key` = :$key";
|
|
$bindParams[$key] = $value;
|
|
}
|
|
$reqSelect .= " WHERE " . implode(' AND ', $whereClauses);
|
|
}
|
|
$reqSelect .= ";"; // Fin de la requête
|
|
|
|
// Debug affichage de la requete construite
|
|
if ($localDebug == '1') {
|
|
$requeteFinale = reconstruireRequete_tableau($reqSelect, $bindParams);
|
|
$debugMsg .= monDebug (2, ['REQUÊTE RECONSTRUITE' => $requeteFinale ], $ficAppelant );
|
|
}
|
|
|
|
// Exécution de la requête
|
|
try {
|
|
$stmt = $idPdo->prepare($reqSelect);
|
|
|
|
// Execution
|
|
$stmt->execute($bindParams ?? []);
|
|
|
|
// Si on récupère plusieurs lignes (SELECT avec plusieurs résultats)
|
|
if ($stmt) {
|
|
$results = [];
|
|
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
|
$results[] = $row; // Ajouter chaque ligne au tableau de résultats
|
|
}
|
|
|
|
// Vérifier si des résultats ont été récupérés
|
|
if (count($results) > 0) {
|
|
|
|
// Récupérer dynamiquement les noms des champs dans le résultat
|
|
$row = $results[0];
|
|
foreach ($fieldNamesToGlobal as $fieldName => $globalVarName) {
|
|
// Vérifier si le champ existe dans les résultats
|
|
if (array_key_exists($fieldName, $row)) {
|
|
// Crée une variable dynamique avec le nom spécifié dans le tableau associatif
|
|
$$globalVarName[] = $row[$fieldName] ?? null;
|
|
|
|
if ($localDebug == '1') {
|
|
$debugMsg .= "<pre>" . print_r($$globalVarName, true) . '</pre>';
|
|
}
|
|
} else {
|
|
$debugMsg .= "Le champ ".$fieldName." n'existe pas dans les résultats.";
|
|
$admMsgClass = 'ko';
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
if ($afficherMsg == 1) {
|
|
$admMsg .= "La requête SELECT a été exécutée avec succès.";
|
|
$admMsgClass = 'ok';
|
|
}
|
|
} else {
|
|
$result = null; // Pas de résultats
|
|
if ($afficherMsg == 1) {
|
|
$admMsg .= "Aucune donnée trouvée. ";
|
|
$admMsgClass = 'ko';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (PDOException $e) {
|
|
if ($afficherMsg == 1) { $admMsg .= "Erreur lors de l'exécution de la requête"; }
|
|
|
|
if ($localDebug == '1') {
|
|
$erreur = $idPdo->errorInfo();
|
|
$debugMsg .= monDebug(2,['PDO message' => $e->getMessage(), 'SQLSTATE' => $erreur[0], 'Driver code' => $erreur[1], 'Erreur mysql' => $erreur[2] ],'');
|
|
}
|
|
$admMsgClass='ko';
|
|
return 2; // Retourner échec
|
|
|
|
// Temps d'exécution (si nécessaire)
|
|
if ($localDebug == '1') {
|
|
$endTime = microtime(true);
|
|
$executionTime = $endTime - $startTime;
|
|
$admMsg .= " | Temps d'exécution : " . number_format($executionTime, 5) . " secondes.";
|
|
}
|
|
}
|
|
|
|
return $result; // Retourner le résultat
|
|
}
|
|
|
|
|
|
function reconstruireRequete_tableau($sql, $params) {
|
|
foreach ($params as $key => $val) {
|
|
$escaped = is_numeric($val) ? $val : "'" . addslashes($val) . "'";
|
|
$sql = str_replace(":$key", $escaped, $sql); // Remplace les `:param`
|
|
}
|
|
return $sql;
|
|
}
|
|
|
|
?>
|
|
|