現在、私はsearch
という名前のテキスト入力とparam
という名前の「選択」ボックスの2つの要素のみを持つ小さな検索フォームを持っています。そのボックス内で選択されたオプションは、DB内のどのテーブル列をフェッチするかを選択するパラメータとして使用する必要があります。 mysql_
機能を使用してmysqliを使用して変数をWHERE節に渡すにはどうすればよいですか?
は、このような何かを行うことができます。
$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の束を使用して、私は列の多くのを持っている特別な場合は、多くの反復および非生産的なようですハンドル。
私が試した最初のことは、パラメータバインド-と$prep->bind_param('ss', $param, $search)
- でしたが、機能しませんでした(と私はまだ分かりません)。
もっと知的なやり方でこれを行う方法はありますか?
+1あなたの質問を整形するには –
.... WHERE "。$ param。" LIKE ....私はSQL文で何をするのですか? – Adsy2010
私が知る限り、列名にプレースホルダを使用することはできません。そのため、動作しませんでした。 –