Ich habe derzeit ein kleines Suchformular mit nur zwei Elementen: eine Texteingabe mit dem Namen search
und ein "Select" -Box mit dem Namen param
. Die in diesem Feld ausgewählte Option sollte als Parameter verwendet werden, um auszuwählen, welche Tabellenspalte in meiner DB abgerufen werden soll.Wie kann ich eine Variable mit mysqli an eine WHERE-Klausel übergeben?
Mit mysql_
Funktionen, so etwas wie dies geschehen könnte:
$param = $_POST['param' ];
$search = $_POST['search'];
$query = 'SELECT * FROM table WHERE $param LIKE "%$search%"';
Aber ich kann es nicht mit der mysqli_
Syntax zu arbeiten. Ich versuche, vorbereitete Anweisungen zu verwenden, aber das Beste, was ich bisher gemacht habe, ist dies:
$param = $_POST['param' ];
$search = $_POST['search'];
if($param == 'first_name')
{
if($prep = $link->prepare('SELECT * FROM table
WHERE first_name
LIKE CONCAT("%", ?, "%")'))
{
$prep->bind_param('s', $search);
$prep->execute();
$prep->bind_result($first_name, $last_name);
while($prep->fetch())
echo $first_name . ' ' . $last_name;
$prep->close();
}
else
echo 'Error while preparing statement.';
}
else if($param == 'last_name')
{
...
}
Aber nur ein Bündel von else if
s mit viel sich wiederholende und unproduktiv scheint, besonders, wenn ich viele Spalten müssen Griff.
Das erste, was ich versuchte, war Parameter verbindlich - ... WHERE ? LIKE ...
und $prep->bind_param('ss', $param, $search)
-, aber es hat nicht funktioniert (und ich weiß immer noch nicht warum).
Gibt es eine Möglichkeit, es intelligenter zu machen?
+1 für nette Formatierung Ihrer Frage –
.... WHERE ". $ Param." LIKE ....Generell was ich mit SQL-Anweisungen tun – Adsy2010
Sie können Platzhalter für Spaltennamen nicht verwenden, soweit ich weiß, deshalb hat es nicht funktioniert. –