gpt4 book ai didi

php - 这个 SQL IF 语句有什么问题?

转载 作者:行者123 更新时间:2023-11-29 08:06:05 24 4
gpt4 key购买 nike

所以我正在构建一个搜索脚本并需要传递两个变量,但首先我想确保 SQL 查询是正确的,所以我现在对变量进行硬编码。所以我的变量是

$comma_separated = "'Alberta','Ontario'";

这将传递给查询,如下所示:

$sql = "SELECT * FROM persons WHERE 1=1";



if ($firstname)
$sql .= " AND firstname='" . mysqli_real_escape_string($mysqli,$firstname) . "'";

if ($surname)
$sql .= " AND surname='" . mysqli_real_escape_string($mysqli,$surname) . "'";

if ($province)
$sql .= " AND province='" . mysqli_real_escape_string($mysqli,$comma_separated) . "' WHERE province IN ($comma_separated)";

$sql .= " ORDER BY surname";

然后当查询运行时,我收到此消息:

cannot run the query because: You have an error in your SQL syntax; check the manual that    corresponds to your MySQL server version for the right syntax to use near 'WHERE province IN ('Alberta','Ontario') ORDER BY surname LIMIT 0, 5' at line 1

但对我来说,查询看起来是正确的,我在这里缺少什么?

提前致谢。

最佳答案

WHERE 不能在那里出现两次。您似乎还尝试以两种不同的方式过滤省份值。基于 $province 将始终是一个值数组(即使只给出一个值)的假设,您可以尝试以下操作:

$sql = "SELECT * FROM persons WHERE 1=1";

if (!empty($firstname)) {
$sql .= " AND firstname='" . mysqli_real_escape_string($mysqli,$firstname) . "'";
}

if (!empty($surname)) {
$sql .= " AND surname='" . mysqli_real_escape_string($mysqli,$surname) . "'";
}

if (!empty($province)) {
array_walk($province, function($value, $key_not_used) use ($mysqli) {
return mysqli_real_escape_string($mysqli, $value);
});
$sql .= " AND province IN ('" . implode(',', $province) . "')";
}

$sql .= " ORDER BY surname";

关于php - 这个 SQL IF 语句有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22718676/

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