gpt4 book ai didi

php - 运行过滤器时的查询不正确 - 查询未执行

转载 作者:行者123 更新时间:2023-11-29 21:07:36 25 4
gpt4 key购买 nike

我有一个表单,允许用户根据他们正在搜索的性别年龄查找任何用户。搜索并不需要两个过滤器,例如,用户可以单独按性别进行搜索,并期望找到一个性别与所搜索的性别相同的随机用户。

这是我实现上述目标的方法:

$refined_gender = (htmlentities (strip_tags(@$_POST['gender'])) != 'any' ? htmlentities (strip_tags(@$_POST['gender'])) : '%');
$age_from = (htmlentities (strip_tags(@$_POST['age_from'])) != 'none' ? htmlentities (strip_tags(@$_POST['age_from'])) : '17');
$age_to = (htmlentities (strip_tags(@$_POST['age_to'])) != 'none' ? htmlentities (strip_tags(@$_POST['age_to'])) : '50');

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

if (isset($_POST['submit_form'])){

$sql = "SELECT * FROM users WHERE
gender like ? AND
age BETWEEN ? AND ? AND
username != ? AND
account_type != 'admin'
ORDER BY RAND()
LIMIT 1";
$defined_chat = mysqli_prepare ($connect, $sql);
mysqli_stmt_bind_param($defined_chat, "ssss",$refined_gender,$age_from,$age_to,$username);
mysqli_stmt_execute ($defined_chat);

while ($get_user = mysqli_fetch_assoc($defined_chat)){
$rand_name = $get_user['username'];
header ("Location: /messages.php?u=$rand_name");
} // while closed
echo "No user found fitting those requirements.";
mysqli_stmt_close($defined_chat);

echo $sql;
}

注意:即使没有对性别和年龄进行任何选择,我也希望能够进行搜索(可以使用 1 个过滤器并且搜索应该有效),我使用的是通配符 % 的组合, PHP 的类似运算符和三元运算符(我也尝试过 gender = ? - 但仍然存在相同的问题)。

但是,搜索从未成功,这导致我echo $sql。如果我搜索男性用户,然后单击搜索,$sql 回显如下:

SELECT * FROM users WHERE gender like ? AND age BETWEEN ? AND ? AND username != ? AND account_type != 'admin' ORDER BY RAND() LIMIT 1

同样的想法也适用于年龄。如果我搜索年龄在 26 - 30 岁之间的人,$sql echo 是这样的:

SELECT * FROM users WHERE gender = ? AND age BETWEEN ? AND ? AND username != ? AND account_type != 'admin' ORDER BY RAND() LIMIT 1

这意味着两个变量都没有传递到查询中,我不明白为什么不这样做。

还应该注意的是,在搜索时,我在这一行收到 mysqli_fetch_assoc() Expectsparameter 1 to be mysqli_result 错误:

 while ($get_user = mysqli_fetch_assoc($defined_chat)){

这表明查询可能有问题?但字段名称和逻辑对我来说似乎很好,所以我不确定。

最佳答案

准备好的语句存在一个小问题。您(此时)无法真正轻松地使用它们进行可调整的查询。因此,最终发生的事情是您正在创建并准备如下所示的声明:

SELECT * FROM users WHERE gender = ? AND age BETWEEN ? AND ? AND account_type != 'admin' ORDER BY RAND() LIMIT 1

但实际上它包含类似的内容:

SELECT * FROM users WHERE gender =  AND age BETWEEN 26 AND 30 AND account_type != 'admin' ORDER BY RAND() LIMIT 1

这意味着您在执行时遇到错误。除非你捕获它,否则它不会输出,我想这更像是一个警告。但这就是您能取得如此成就的原因。

我确实在我的一个项目中解决了这个问题,因为我下定决心。我做了很多if != ""设置这样做,这是丑陋的代码。但它确实有效。

if($gender != ""){
array_push($selectParams,"gender = ?");
$bindString .= "s";
}

$where = join(" AND ", $selectParams);

这基本上就是我解决这个问题的方法,您可能需要根据您的需要对其进行修改。再次... super 难看并且可能 super 容易出错。这是一种方法,但我不确定它是否真的应该这样做。

关于php - 运行过滤器时的查询不正确 - 查询未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com