私は3つのパラメータを使用して検索できる自分のウェブサイトの検索機能を構築しています。ユーザーは、3を入力してテーブルをフィルタリングするか、まったくフィルタリングしないかを選択して、テーブル全体を受信することができます。私は、ユーザーが入力したものに応じて動的にクエリを構築する方法を考え出しましたが、適切な数の引数と正しい順序でbind_params()
を呼び出すのに問題があります。params配列の動的バインディングMySQLi
コード:
$sql = "SELECT position, rank, fullname, phonenumber, email, division
FROM `table` WHERE 1=1 ";
if(!empty($_POST['fname'])){
$firstname = $_POST['fname'];
$sql .= " AND `fullname` LIKE '%?%'";
}
if($_POST['div'] !== "All"){
$division = $_POST['div'];
$sql .= " AND `division` LIKE '%?%'";
}
if(!empty($_POST['pos'])){
$position = $_POST['pos'];
$sql .= " AND `position` LIKE '%?%'";
}
$stmnt = $db->prepare($sql);
$stmnt -> bind_param('sss', $firstname, $division, $position);
$stmnt -> bind_result($position, $rank, $fullname, $phonenumber, $email,$division);
$stmnt -> execute();
私はいつもこのエラーが出る:Number of variables doesn't match number of parameters in prepared statement
私はそれを取得していますなぜ私は理解しますが、私は複数のものを試してみましたが、何も働いていません。あらゆるヒントや文書へのリンクが役立ちます。おかげ
これは、名前付きプレースホルダを持っているので、PDOで行う方が簡単であることに注意してください。単に 'arr ay() '構造体を' execute() 'に置き換えます。 – tadman
@tadmanあなたが気にしないなら、例に私を指摘できますか? – ybce
注:結果を実行してバインドします。 http://php.net/manual/en/mysqli-stmt.bind-result.phpこれはおそらく、ここでの大きな障害です。条件のすべてが満たされ、すべてのPOST配列に値が含まれていることを確認してください。そのうちの1つが失敗した場合、クエリも失敗します。 –