Isn't the fix exactly the same? Have the LLM map the request to a preset list of approved queries.
Output = LLM(UntrustedInput);
What you're suggesting is
"TrustedInput" = LLM(UntrustedInput); Output = LLM("TrustedInput");
But ultimately this just pulls the issue up a level, if that.
And don't forget to set the permissions.
So, you have to choose between making useful queries available (like writing queries) and safety.
Basically, by the time you go from just mitigating prompt injections to eliminating them, you've likely also eliminated 90% of the novel use of an LLM.