Php 这个SQL IF语句有什么问题?
因此,我正在构建一个搜索脚本,需要传递两个变量,但首先我要确保SQL查询是正确的,所以我现在正在硬编码变量。所以我的变量是Php 这个SQL IF语句有什么问题?,php,mysql,if-statement,Php,Mysql,If Statement,因此,我正在构建一个搜索脚本,需要传递两个变量,但首先我要确保SQL查询是正确的,所以我现在正在硬编码变量。所以我的变量是 $comma_separated = "'Alberta','Ontario'"; 这将传递到查询,如下所示: $sql = "SELECT * FROM persons WHERE 1=1"; if ($firstname) $sql .= " AND firstname='" . mysqli_real_escape_string($mysqli,$firstn
$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
但对我来说,问题似乎是对的,我在这里遗漏了什么
提前感谢。将最后一部分更改为:
if ($province)
$sql .= " AND province IN (" . mysqli_real_escape_string($mysqli,$comma_separated) . ")";
您不能让
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";
您的SQL包含两个
,其中
SELECT * FROM persons WHERE 1=1
AND firstname='fn'
AND surname='sn'
AND province='p'
WHERE province IN ($comma_separated)
ORDER BY surname
将最后一位更改为:
$sql .= " AND province='" . mysqli_real_escape_string($mysqli,$comma_separated) . "' AND province IN ($comma_separated)";
即:
AND province='p'
AND province IN ('Alberta','Ontario')
编辑。请参见上文。您在查询中使用了两次WHERE
,这实际上是错误的。字符串值周围必须有单引号。这个字符串不是问题所在。@MikeBrant是的,你是对的。不知道我在想什么。。。修正了。你在内爆时的语法有问题。当我回显它时,我得到”。内爆(,$province)。“
。在我等待你的评论时,我会尽力修复它,但你可能会击败我。@JLA我觉得它很好。您是否做了一些与字符串引用不同的事情?如果您在该行前面的某个地方漏掉了一个报价,您可能会得到这个结果。我已经仔细检查了这一点,没有检索到任何结果。好的,所以我以一种远不如您所展示的@Mike Brant优雅的方式来解出这个问题。但它是这样的:首先我内爆$province,然后用单引号将其括起来,如下所示()。所以我的代码是这样的:$inpolosion=inpolde(“,”,$province)$内爆=“””“$in爆。””
然后我按照前面的建议通过查询传递它<代码>如果($province)$sql.=“和($inflation)”中的省代码>现在一切正常!谢谢你的帮助@在查询中使用输入之前,不要忘记转义该输入。