Maison > base de données > tutoriel mysql > Comment puis-je éviter la répétition de code lors de l'utilisation d'instructions préparées PHP SQL ?

Comment puis-je éviter la répétition de code lors de l'utilisation d'instructions préparées PHP SQL ?

DDD
Libérer: 2024-12-25 18:30:14
original
882 Les gens l'ont consulté

How Can I Avoid Code Repetition When Using PHP SQL Prepared Statements?

É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);
Copier après la connexion

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));
}
Copier après la connexion

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();
}
Copier après la connexion
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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal