-1

PHP を使用して検索用語をループし、検索を実行する前にそれらを SQL 文字列に追加しようとしています。ただし、次のコードが原因でページが機能していません。

    $sql .= "
    WHERE Title
    LIKE '%$ss[$i]%'";

このコードの完全なコンテキストは、次の場所で確認できます。

if(isset($_POST['ss'])){
    $ss = $_POST['ss'];
    $ss = explode(' ',$ss);
    $num_search_terms = count($ss);
    $sql = "
    SELECT * 
    FROM CRDRecord";
    $i = 0;
    while($i <= $num_search_terms){
        $ssf=
        $sql .= "
        WHERE Title
        LIKE '%$ss[$i]%'";
        $i++;
    }
    $params = array();
    $options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
    $stmt = sqlsrv_query( $conn, $sql , $params, $options );
    $row_count = sqlsrv_num_rows( $stmt );
    if ($row_count === false){
       echo "Error in retrieving row count.";
    }
    else {
    $jsonData = '{ "num":"Number of records-'.$row_count.',<br><br> search terms being used- <br>search 1- '.$ss[0].'<br>search2- '.$ss[1].'<BR>Number of search terms detected- '.$num_search_terms.'<br>SQL STRING: '.$sql.'" }';
       echo $jsonData;
    }
}

やりたいことはわかっているのに、それをどう表現したらいいのかわからない。どんな助けでも大歓迎です。

4

1 に答える 1

1

WHERE を LOOP の外に移動し、連結を処理するためのデフォルト条件を追加する必要があります

$sql = "
SELECT * 
FROM CRDRecord WHERE 1=1 ";
$i = 0;
while($i <= $num_search_terms){
    $ssf=
    $sql .= "
    AND Title LIKE '%$ss[$i]%'";
    $i++;
}

この方法を実行すると、WHERE ステートメントが多すぎます。許可されるのは 1 つだけです。WHERE 1=1 は、他の条件の追加を開始する前に、WHERE 句に単一の条件を含めることができる方法です。

于 2012-11-22T14:32:55.470 に答える