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
DDDOriginal
2024-12-25 18:30:14909Durchsuche

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);

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!

Stellungnahme:
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