Heim > Datenbank > MySQL-Tutorial > Wie kann ich Codewiederholungen vermeiden, wenn ich PHP SQL Prepared Statements verwende?

Wie kann ich Codewiederholungen vermeiden, wenn ich PHP SQL Prepared Statements verwende?

DDD
Freigeben: 2024-12-25 18:30:14
Original
871 Leute haben es durchsucht

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

Vermeiden von Codewiederholungen in vorbereiteten PHP-SQL-Anweisungen

In den meisten Beispielen für vorbereitete PHP-SQL-Anweisungen werden die Feldnamen mehrmals wiederholt. Diese Wiederholung kann ausführlich und fehleranfällig sein, wenn Änderungen vorgenommen werden müssen. Hier sind einige Lösungen zur Minimierung der Redundanz:

Raw PHP

Indem Sie die Fields-Klausel in der Abfrage weglassen und Positionsplatzhalter verwenden, können Sie die Ausführlichkeit reduzieren. Stellen Sie sicher, dass alle Tabellenspalten Werte haben, auch wenn es sich um Null- oder Standardwerte handelt.

$data = [$taskName, $startDate, $completedDate];
$sql = 'INSERT INTO tasks VALUES(null, ?, ?, ?)';
$db->prepare($sql)->execute($data);
Nach dem Login kopieren

Hilfsfunktion

Das Erstellen einer Hilfsfunktion für Einfügungen kann das weiter vereinfachen Code. Diese Funktion sollte sich vor SQL-Injection durch Feldnamen in Acht nehmen.

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));
}
Nach dem Login kopieren

Baby Object-Relational Mapper (ORM)

Dieser Ansatz nutzt objektorientierte Programmierung zur Automatisierung die Erstellung von Einlagen. Eine Basisklasse enthält allgemeine Methoden und bestimmte Tabellen werden als untergeordnete Klassen definiert.

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();
}
Nach dem Login kopieren
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;
Nach dem Login kopieren

Diese Lösungen beseitigen Redundanz, indem sie weniger Code verwenden und doppelte Feldnamen vermeiden.

Das obige ist der detaillierte Inhalt vonWie kann ich Codewiederholungen vermeiden, wenn ich PHP SQL Prepared Statements verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage