Wijzig gegevens veilig · eindproject
Eindproject: Project: bouw functies om leden veilig te wijzigen
De ledentabel heeft dezelfde zorgvuldige bewerkingen nodig als je voor voorwerpen hebt gebouwd. Deze keer kies je alle vier de instructies en parameterkoppelingen zelf, met ledenvelden in plaats van namen of posities die specifiek voor voorwerpen zijn over te nemen.
Elke ledenrij heeft precies deze volgorde:
| Positie | Kolom | Voorbeeldwaarde |
|---|---|---|
| 1 | id | 13 |
| 2 | member_code | "M'50" |
| 3 | name | "Ari O'Neil" |
| 4 | loan_limit | 2.5 |
Open member_changes.py. Het bevat vier functiedefinities. Behoud hun namen en argumenten en laat elke functie zich als volgt gedragen:
find_member(connection, member_code)selecteertid, member_code, name, loan_limitvoor één gebonden code en geeft.fetchone()terug.add_member(connection, member)voegt de vier expliciete kolommen in met vier placeholders en geeft direct derowcountvan de insertcursor terug.change_loan_limit(connection, member_code, loan_limit)wijzigtloan_limitwaar de gebonden code overeenkomt. De waarden zijn(loan_limit, member_code)en de functie geeft directrowcountterug.remove_member(connection, member_code)verwijdert waar de gebonden code overeenkomt en geeft directrowcountterug.
Schrijf binnen elke functie een vaste instructie tussen drievoudige aanhalingstekens en roep daarna connection.execute(statement, values) aan via de meegegeven open verbinding. Open, sluit of vervang die verbinding niet.
Een nuttige volgorde is zoeken, invoegen, wijzigen en dan verwijderen. De vier parametertuples bouwen dan vanzelf voort op wat je al weet:
| Functie | Waarden die naast de instructie worden doorgegeven |
|---|---|
find_member | (member_code,) |
add_member | member |
change_loan_limit | (loan_limit, member_code) |
remove_member | (member_code,) |
Voor een code zoals "M'50" blijft de apostrof in elk geval binnen de Python-waarde. Die wordt nooit onderdeel van de SQL-tekst, dus zoeken, wijzigen en verwijderen van dat lid gebruiken allemaal dezelfde veilige scheiding.
Run laat één volledige reeks met letterlijke aanroepen zien. Het vindt Riley en roept daarna dit aan:
add_member(connection, (13, "M'50", "Ari O'Neil", 2.5))
change_loan_limit(connection, "M'50", 4.5)
remove_member(connection, "M'50")
De verwachte teruggegeven waarden zijn 1, 1 en 1. Zoekopdrachten ervoor en erna tonen de volledige tuple, de gewijzigde limiet en uiteindelijk None. Dezelfde open verbinding draagt elke waarneming.
De uitvoering gebruikt ook "X' OR 1=1 --" als ontbrekende code. Beide wijzigingsfuncties moeten 0 teruggeven en Sams rij M-23 moet ongewijzigd blijven. Behoud elke volledige code als gebonden waarde.
Submit test elke functie afzonderlijk en in een reeks met onbekende ID’s, namen, apostrofs, tekst die op SQL lijkt en positieve limieten met gehele getallen en kommagetallen. De bestaande regels van de tabel kunnen hun normale databasefout geven bij dubbele ID’s, dubbele codes of ongeldige limieten; verberg die fouten niet en geef ze geen andere naam.
Werk aan één functie tegelijk. Maak eerst het gewone geval zichtbaar, controleer daarna de ontbrekende of verdacht uitziende waarde en ga dan pas verder. De voltooide module geeft het ledendeel van het uitleenproject dezelfde nauw begrensde, waarneembare en veilig gebonden wijzigingen als het voorwerpdeel.
Opdracht
Implementeer alle vier de functies in member_changes.py met vaste SQL en afzonderlijke gebonden waarden. Geef een tuple of None terug vanuit find_member en geef vanuit toevoegen, wijzigen en verwijderen direct gehele rowcounts terug.
Voer de volledige ledenreeks uit, controleer het ongewijzigde andere lid en stuur de module in.