Ich verwende eine ziemlich komplexe vorbereitete Anweisung mit verschiedenen Bedingungen in der WHERE-Klausel und an einer Stelle brauche ich tatsächlich die gleiche Anweisung mit einer genaueren Bedingung. Das Erstellen von zwei verschiedenen Anweisungen ist ein schlechter Ansatz, da beide die meisten ihrer Abfragezeichenfolgen teilen und wenn ich ein anderes aktualisiere, müsste ich auch das andere aktualisieren. Bisher habe ich versucht, dies mit:Vorbereitete Anweisung mit optionaler Bedingung wiederverwenden
SELECT columns
FROM tables
WHERE manyConditions AND (specificColumn = ? OR ? = NULL)
In diesem Szenario, das ich ein beliebiges Argument binden könnte und NULL die spezifische Voraussetzung nutzlos für Abfragen zu machen, die sie nicht benötigen ($pdo->execute([/* ... */, -1, null])
), während nach wie vor von specificColumn
filtern zu können, wenn Sie einen richtigen Wert und etwas, das nicht NULL ist, binden ($pdo->execute([/* ... */, 'specific value', true])
).
Dies ist eine wirklich schmutzige Möglichkeit, Code-Duplizierung zu verhindern, die mich dazu zwingt, in den meisten Fällen zwei weitere Variablen zu binden.
Gibt es einen eleganteren Ansatz, um Code-Duplizierung zu verhindern?
Bitte hinterlassen Sie etwas konstruktives Feedback verwenden, warum Sie diese Frage ist Downvoting - vielleicht etwas gibt es um es zu verbessern? –
Seien Sie nicht traurig über Downvoting Ich hatte die gleiche Erfahrung und ich bekam nie eine Antwort ... – JosMac
Downvoters das Mindeste, was Sie tun können, ist zu kommentieren –