2012-11-22 47 views
-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; 
    } 
} 

我知道我想要做的,但不能找出如何表达它。很感谢任何形式的帮助。

+1

错误?例外?没有数据?究竟是什么错误以及你试图解决的问题? – J0HN

+0

我不确定,我没有很好的调试设置。我只是想知道是否有任何明显错误的代码片段在顶端... –

+1

试过“回声调试”?这很混乱,但总比没有好。尝试在循环后面回显'$ sql'。 – J0HN

回答

1

你需要移动WHERE退出循环,并添加一个默认条件来处理级联

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

做太多的方式结果WHERE语句,你只允许一个。 WHERE 1 = 1是一种方法,允许您在开始附加其他条件之前在WHERE子句中拥有单个条件。

+0

Brilliant XYZ_909非常感谢您的帮助。对于关闭这个问题的其他仇敌,你可以做一个。 –

+0

我应该说,如果你想使用OR而不是AND,那么你可能需要唠叨一些东西,但是原则上是多个WHERE。 –