我一直在尝试调用一个函数,但是它似乎不起作用。
因此,这是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]);
答案 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中运行,并检查为什么失败。 可能您生成了错误的查询。