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);
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)); }
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(); }
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;
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!