Hmmm, ok, maar dat is toch niet echt een probleem van de methode zelf? Of anders gezegd, dit is toch niet een PHP topic? Er staat [SQL / MySQL] in de topic title

't Grootste nadeel van de prepared statements vind ik de administratie van de getalletjes
Inderdaad ja. Ik snap ook niet dat ze niet meteen voor -ook- een name-based solution zijn gegaan. In een sprintf achtige situatie is het wel handig, maar voorderest is het heel vervelend bij te houden welk getalletje waar voor stond, zeker als dezelfde IN parameter meerdere malen voorkomt en de querie groot is.
Ik zat zelf te denken om een eigen SQL formaat te maken waarbij je namen gebruikt ipv ? icm wat wrapper code om Connection en PreparedStatement heen die de namen naar ? omzet en de positie van de namen bijhoudt zodat bijv een setInt( "naam" , 1) resulteerd in bijv setInt( 1, 1 ) en setInt(2, 1).
en het feit dat je geen dynamische lijsten in een IN-statement kan stoppen, althans ik heb daar nooit echt iets voor gevonden, zeker niet een collection-based oplossing.
Je bedoelt iets als:
SQL:
1
| select * from bla where bar in (?); |
Ik heb dat nog nooit geprobeerd, je zou zeggen dat het met setString zou kunnen, maar dat kan dus niet?
Als je toch met wrappers bezig bent kun je dat wel dynamisch gaan herschrijven. Bijv, bij 3 parameters die je doorkrijgt via de request string maak je eerst:
SQL:
1
| select * from bla where bar = ? or bar =? or bar = ?; |
En deze vul je dan in met iets als setCollection( "mycollection", "1,2,3") waarbij de wrapper code dan bijhoudt wat mycollection is en naar welke nummertjes de 1, 2 & 3 gemapped zijn.
It's shocking to find how many people do not believe they can learn, and how many more believe learning to be difficult.