Attualmente ho un piccolo modulo di ricerca con solo due elementi: un input di testo denominato search
e una casella "seleziona" denominata param
. L'opzione selezionata all'interno di quella casella dovrebbe essere usata come parametro per scegliere quale colonna della tabella nel mio DB sarebbe stata recuperata.Come posso passare una variabile ad una clausola WHERE usando mysqli?
Utilizzando mysql_
funzioni, qualcosa di simile potrebbe essere fatto:
$param = $_POST['param' ];
$search = $_POST['search'];
$query = 'SELECT * FROM table WHERE $param LIKE "%$search%"';
ma non riesco a farlo funzionare con la sintassi mysqli_
. Sto cercando di utilizzare le istruzioni preparate, ma la migliore che ho fatto finora è questo:
$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')
{
...
}
Ma solo con un po 'di else if
s sembra molto ripetitivo e improduttivo, specialmente se ho un sacco di colonne alle maniglia.
La prima cosa che ho provato è stata il collegamento dei parametri - ... WHERE ? LIKE ...
e $prep->bind_param('ss', $param, $search)
-, ma non ha funzionato (e non so ancora perché).
C'è un modo per farlo in un modo più intelligente?
+1 per una buona formattazione della domanda –
.... DOVE ". $ Param." MI PIACE ....in generale quello che faccio con le istruzioni sql – Adsy2010
Non è possibile utilizzare i segnaposti per i nomi delle colonne, per quanto ne so, è per questo che non ha funzionato. –