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 .= "
" . print_r($$globalVarName, true) . ''; } } 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; } ?>