计算具有搜索功能的所有产品

时间:2019-04-10 10:56:58

标签: php function

我一直在尝试调用一个函数,但是它似乎不起作用。 因此,这是function count_all_products_q。这是分页所必需的。

 function count_all_products_q($options=[]) {
global $db;

$visible = $options['visible'] ?? false;

$search_statement = isset($_POST['search']) ? $_POST['search'] : '';
if ($search_statement == '') {
$search_statement = isset($_GET['search']) ? $_GET['search'] : '';        
}  

$search = h(db_escape($db, $search_statement));

$sql = "SELECT COUNT(id) FROM products ";
if ($search != '') {            
$search = h(db_escape($db, $search_statement));     
$sql .= "WHERE (`prod_name` LIKE '%".$search."%') ";
    }
if($visible) {
  $sql .= "AND visible = true ";
}   
$sql .= "ORDER BY position ASC";

$result = mysqli_query($db, $sql);
confirm_result_set($result);
$row = mysqli_fetch_row($result);
mysqli_free_result($result);
//[0] - I want only one number.
$count = $row[0];
return $count;

  }

search.php

$products_count = count_all_products_q(['visible' => $visible]);

    //if count is nothing ('') redirect to....
    if($products_count == '') {
          redirect_to(url_for('/index.php'));
    }

当我错误地单击“搜索”时,此部分不起作用if($products_count == ''),而不是重定向,而是Database query failed (search.php?search=)

我错过了什么吗,我做错了吗?感谢您的关注!

UPDATE2 一切正常!

search.php

$visible = $visible ?? true;

$search_statement = isset($_POST['search']) ? $_POST['search'] : '';
    if ($search_statement == '') {
$search_statement = isset($_GET['search']) ? $_GET['search'] : '';        
    } 

$search = h(db_escape($db, $search_statement));

if($search == '') {
      redirect_to(url_for('/index.php'));
}

$products_count = count_all_products_q(['visible' => $visible]);

3 个答案:

答案 0 :(得分:2)

在连接“ WHERE”条件的代码时遇到问题。 if($ visible)然后是“ WHERE” ,这是错误的,如果此条件失败,将给出查询错误。还 $ options ['visible']? false; ,此代码可能会导致问题,具体取决于PHP上的版本。您可以像这样更改条件,使其在所有情况下都可以使用。接着是其余逻辑。

$sql = "SELECT COUNT(id) FROM products WHERE 1 ";
if($visible) { 
     $sql .= "AND visible = true "; 
}
if ($search != '') {
     $search = h(db_escape($db, $search_statement));
     $sql .= "AND (prod_name LIKE '%".$search."%') ";
}

答案 1 :(得分:1)

如果没有可见的错误和搜索内容,则您的查询将被破坏 在这种情况下,您应该

        if($visible) { 
           $sql .= "WHERE visible = true "; 
        }
        if ($search != '') {
           $search = h(db_escape($db, $search_statement));
           $sql .= $visible ? 'AND ' : 'WHERE';
           $sql .= " (`prod_name` LIKE '%".$search."%') ";
        }

未经测试,但希望您能看到您的问题。

答案 2 :(得分:0)

使用echo $ sql或echo $ this-> db-> query()打印查询 直接在mysql中运行,并检查为什么失败。 可能您生成了错误的查询。