Das Übergeben eines Spaltennamens als Parameter in MySQL (die Frage im Titel) ist in einer SQL-Anweisung nicht möglich. Die Identifikatoren in einer SQL-Anweisung (z. B. die Tabellennamen und Spaltennamen) müssen Teil des SQL-Textes sein. Diese können nicht mit einem Bind-Platzhalter übergeben werden.
Der IN
Der Vergleichsoperator erwartet eine in Klammern eingeschlossene Werteliste oder eine in Klammern eingeschlossene SELECT-Abfrage, die eine Reihe von Werten zurückgibt.
Es ist nicht klar, was Sie versuchen zu tun.
Ich vermute, dass template_allowed_parent_templates
ist eine Spalte in der Tabelle und enthält eine durch Kommas getrennte Liste von Werten. (Schauder.)
Ich vermute, Sie suchen nach MySQL FIND_IN_SET
String-Funktion, die eine kommagetrennte Liste nach einem bestimmten Wert "durchsucht".
Als einfache Demonstration:
SELECT FIND_IN_SET('5', '2,3,5,7')
, FIND_IN_SET('4', '2,3,5,7')
Die Funktion gibt eine positive ganze Zahl zurück, wenn der angegebene Wert "gefunden" wird. Sie können diese Funktion in einem Prädikat verwenden, z. B.
WHERE FIND_IN_SET(id,template_allowed_parent_templates)
oder
WHERE FIND_IN_SET( ? ,template_allowed_parent_templates)
(Das funktioniert, weil in MySQL eine positive Ganzzahl in einem booleschen Kontext als TRUE ausgewertet wird.)
Ich vermute nur, was Sie erreichen wollen.