0

こんにちは皆さん、私の間違いを指摘してください:(私は自分のページの複数列検索を行いたいです:だから私のスクリプトはこれです:

<?
$search=$_GET['s'];

$query="SELECT * FROM `filmi` WHERE `nomer` rlike '$search' or `rezume` rlike '$search' or `kategoriq` rlike '$search' or ' order by seriq asc ";
?>

価格帯で検索したいので、これを作成します:

<?
$search=$_GET['s'];
$pricemin=$_GET['min'];
$pricemax=$_GET['max'];
$query="SELECT * FROM `filmi` WHERE `nomer` rlike '$search' or `rezume` rlike '$search' or `kategoriq` rlike '$search' or 'seriq' BETWEEN '$pricemin' and '$pricemax'  order by seriq asc ";
?>

この場合、それを置き換える方法は?私は他の人が検索エンジンのコードを書いているのを見ていて、彼らは使っています(SELECT * FROM table WHERE Table1 LIKE '%$table1%' AND Table2 LIKE '%$table2%' AND Price BETWEEN '%$min%','%$max%'"); が、私のものでは動作しません;(助けてください

4

2 に答える 2

0

BETWEENこのように価格帯で結果セットをフィルタリングするために使用します

$query="SELECT * FROM `filmi` 
         WHERE (`nomer` RLIKE '$search' OR 
                `rezume` RLIKE '$search' OR 
                `kategoriq` RLIKE '$search') AND 
                `seriq` BETWEEN '$pricemin' AND '$pricemax'  
         ORDER BY seriq";

ここにsqlfiddleがあります

そして @cryptic が提案したように、またはのいずれかで準備済みステートメントを使用することを検討してmysqli_*くださいPDO

UPDATE3:そして、これはあなたのケースで準備されたステートメントを使用してmysqli、キーワードのみ、キーワードと価格帯、または価格帯のみで検索できるようにする方法です:

$stype = 0;
if (isset($_GET['s']) && $_GET['s']){
    $search=$_GET['s'];
    $stype += 1;
}
if (isset($_GET['min']) && $_GET['min'] && 
    isset($_GET['max']) && $_GET['max']){
    $pricemin=$_GET['min'];
    $pricemax=$_GET['max'];
    $stype +=2;
}
if (!$stype) {
    echo "Required parameter(s) missing.";
    exit;
}
/* connect to the database*/
$db = new mysqli("localhost", "user", "password", "dbname");
/* check connection */
if ($db->connect_errno) {
    echo "Connection failed: " . $db->connect_error;
    exit();
}
$query="SELECT * FROM `filmi` WHERE ";
if ($stype == 1) {
    $query .= " (`nomer` rlike ? OR `rezume` rlike ? OR `kategoriq` rlike ?) ";
} elseif ($stype == 2) {
    $query .= " `seriq` BETWEEN ? AND ? ";
} elseif ($stype == 3) {
    $query .= " (`nomer` rlike ? OR `rezume` rlike ? OR `kategoriq` rlike ?) AND `seriq` BETWEEN ? AND ?";
}
$query .= " ORDER BY seriq";
/* create a prepared statement */
if (!$stmt = $db->prepare($query)) {
    //handle error here;
    echo "Error preparing statement.";
    exit;
}
/* bind parameters for markers */
if ($stype == 1) {
    $stmt->bind_param("sss", $search, $search, $search);
} elseif ($stype == 2) {
    $stmt->bind_param("dd", $pricemin, $pricemax);
} elseif ($stype == 3) {
    $stmt->bind_param("sssdd", $search, $search, $search, $pricemin, $pricemax);
}
/* execute query */
$stmt->execute();
/* get result */
$result = $stmt->get_result();
if ($result) {
/* now you can fetch the results into an assoc array */
    while ($row = $result->fetch_assoc()) {
        echo $row['nomer']. ", " .$row['rezume']. ", " .$row['kategoriq']. ", " .$row['seriq']. "<br>";
    }
}
/* close statement */
$stmt->close();
/* close db connection */
$db->close();
于 2013-02-16T00:41:03.873 に答える
0

クエリ (SQL インジェクションを無視):

SELECT * FROM table 
WHERE field1 LIKE '%$table1%' 
AND field2 LIKE '%$table2%' 
AND Price BETWEEN 'val3' AND 'val2'

BETWEENlikeを使用して比較を行うことはできません。

于 2013-02-16T00:43:13.487 に答える