Éviter la répétition de code dans les instructions préparées PHP SQL
Dans la plupart des exemples d'instructions préparées PHP SQL, les noms de champs sont répétés plusieurs fois. Cette répétition peut être verbeuse et sujette aux erreurs si des modifications doivent être apportées. Voici quelques solutions pour minimiser la redondance :
PHP brut
En omettant la clause des champs dans la requête et en utilisant des espaces réservés positionnels, vous pouvez réduire la verbosité. Assurez-vous que toutes les colonnes du tableau ont des valeurs, même si elles sont nulles ou par défaut.
$data = [$taskName, $startDate, $completedDate]; $sql = 'INSERT INTO tasks VALUES(null, ?, ?, ?)'; $db->prepare($sql)->execute($data);
Fonction d'assistance
La création d'une fonction d'assistance pour les insertions peut simplifier davantage le processus. code. Cette fonction doit se méfier de l'injection SQL via les noms de champs.
function prepared_insert($conn, $table, $data) { $keys = array_keys($data); $keys = array_map('escape_mysql_identifier', $keys); $fields = implode(",", $keys); $table = escape_mysql_identifier($table); $placeholders = str_repeat('?', count($keys) - 1) . '?'; $sql = "INSERT INTO $table ($fields) VALUES ($placeholders)"; $conn->prepare($sql)->execute(array_values($data)); }
Baby Object-Relational Mapper (ORM)
Cette approche utilise la programmation orientée objet pour automatiser la création d'inserts. Une classe de base contient des méthodes communes et des tables spécifiques sont définies en tant que classes enfants.
public function create($data): int { $fields = $this->makeFieldList($data); $placeholders = str_repeat('?', count($data) - 1) . '?'; $sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)"; $this->sql($sql, array_values($data)); return $this->db->lastInsertId(); }
class UserGateway extends BasicTableGateway { protected $table = 'gw_users'; protected $fields = ['email', 'password', 'name', 'birthday']; } $data = [ 'email' => '[email protected]', 'password' => 123, 'name' => 'Fooster', ]; $userGateway = new UserGateway($pdo); $id = $userGateway->create($data); echo "Create: $id", PHP_EOL;
Ces solutions éliminent la redondance en utilisant moins de code et en évitant les noms de champs en double.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!