私は現在、2 つの要素のみを持つ小さな検索フォームを持っています: という名前のテキスト入力と という名前search
の「選択」ボックスparam
です。そのボックス内で選択されたオプションは、DB 内のどのテーブル列をフェッチするかを選択するためのパラメーターとして使用する必要があります。
関数を使用mysql_
すると、次のようなことができます。
$param = $_POST['param' ];
$search = $_POST['search'];
$query = 'SELECT * FROM table WHERE $param LIKE "%$search%"';
しかし、私はそれをmysqli_
構文で動作させることができません。準備済みステートメントを使用しようとしていますが、これまでに行った中で最高のものは次のとおりです。
$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')
{
...
}
しかし、たくさんのelse if
s を使用するだけでは、特に処理する列がたくさんある場合は、非常に反復的で非生産的です。
私が最初に試したのは、パラメータ バインディング -... WHERE ? LIKE ...
と$prep->bind_param('ss', $param, $search)
- でしたが、うまくいきませんでした (理由はまだわかりません)。
よりインテリジェントな方法でそれを行う方法はありますか?