ユーザーが物件を検索できる検索ボックスがあります。また、検索ボックスには2つの選択ボックスがあります。1つは最低価格用、もう1つは最高価格用です。
ユーザーが最低価格10000と最高価格1000000を選択した場合、クエリはどのようになりますか。
これが私のコードですが、機能していないようです:
SELECT * FROM property WHERE price > '%{$_POST['pricemin']}%' AND price < '%{$_POST['pricemax']}%'
まず、ユーザーが入力した値をクエリに直接入力しないでください。SQL インジェクション攻撃を求めています。次に、なぜ%数字に対してワイルドカード マッチ ( ) を実行しようとしているのですか?
SELECT col1, col2, col3 FROM property WHERE price BETWEEN $min AND $max;
%value%まず、 を使用しない限り、 を使用して比較を行うことはできませんLIKE。第二に、準備されたステートメントを実際に使用する必要があります。
if (isset($_POST['pricemin'], $_POST['pricemax'])) {
$stmt = $db->prepare('SELECT * FROM property WHERE price > ? AND price < ?');
$stmt->execute(array($_POST['pricemin'], $_POST['pricemax']));
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
PDO の例を示します。PDO や mysqli を持っていない場合は、それを使い始めてください!
わかりました、最初に変数をエスケープする必要があるので、これを試してください
$pricemin = mysql_real_escape_string($_POST['pricemin']);
$pricemax = mysql_real_escape_string($_POST['pricemax']);
そして、私はあなたが逃したと思います
SELECT * FROM property WHERE price > '$pricemin' AND price < '$pricemax'
しかし、php http://www.php.net/manual/en/book.mysqli.php asmysql_real_escape_string()でデータベースを使用していて、他の mysql 関数が減価償却されている場合は、mysqli を調べる必要があります。