8

私は現在、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 ifs を使用するだけでは、特に処理する列がたくさんある場合は、非常に反復的で非生産的です。

私が最初に試したのは、パラメータ バインディング -... WHERE ? LIKE ...$prep->bind_param('ss', $param, $search)- でしたが、うまくいきませんでした (理由はまだわかりません)。

よりインテリジェントな方法でそれを行う方法はありますか?

4

3 に答える 3