【问题标题】:Variable to select array object. (variable within variable) [closed]用于选择数组对象的变量。 (变量内的变量)[关闭]
【发布时间】:2012-11-22 13:34:05
【问题描述】:

我正在尝试使用 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;
    }
}

我知道我想做什么,但不知道如何表达。非常感谢任何帮助。

【问题讨论】:

  • 错误?例外?没有数据?究竟出了什么问题以及您尝试解决的问题?
  • 我不确定,我没有很好的调试设置。我只是想知道顶部代码的sn-p是否有任何明显错误......
  • 试过“回声调试”?这很混乱,但总比没有好。尝试在循环之后回显$sql。
  • 谢谢约翰,这就是我得到的 'SELECT * FROM CRDRecord WHERE Title LIKE '%%' WHERE Title LIKE '%%'检索行数时出错。'
  • 好了,现在看看sql字符串,想一想。相信你能很快找到问题所在。如果不是 - 考虑停止正在做的事情并花一些时间学习 SQL,因为错误非常明显。另外,考虑使用PDO

标签: php sql ajax


【解决方案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 语句,您只能使用一个。 WHERE 1=1 是一种允许您在开始附加其他条件之前在 WHERE 子句中拥有单个条件的方法。

【讨论】:

  • 出色的 XYZ_909 非常感谢您的帮助。对于关闭此问题的其他仇恨者,您可以做一个。
  • 如果你想使用 OR 而不是 AND,我应该说你可能需要 tweek 事情,但原则点是多个 WHERE。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多