嗨,伙计们,我试图在我的PHP中执行多个条件搜索,所以我想使用foreach根据用户选择的数量自动添加AND语句。下面是我的代码:
$sub = trim(ucfirst($_POST['sub']));
$any = trim(ucfirst($_POST['key']));
$count = 0;
$query = "SELECT P.PTY_ID, P.PTY_UNITNUM, P.PTY_STREET, P.PTY_POSTCODE, P.PTY_SUBURB,P.PTY_CITY, T.P_TYPE_NAME,
L.SALE_PRICE, L.AVAILABILITY, R.PTY_ID,F.FEAT_ID, R.FEAT_ID,F.FEAT_NAME
FROM PROPERTY_TYPE T, PROPERTY P, LISTINGS L, PROPERTY_FEATURE R, FEATURE F
WHERE P.P_TYPE_ID = T.P_TYPE_ID(+)
AND P.PTY_ID = L.PTY_ID(+)
AND R.FEAT_ID= F.FEAT_ID
AND R.PTY_ID= P.PTY_ID
AND REGEXP_LIKE (P.PTY_SUBURB,'$sub')
AND REGEXP_LIKE (P.PTY_STREET||P.PTY_POSTCODE,'$any')
OR(
".foreach ($_POST["check"] as $feat_id) {
if ($count != 0)
echo "AND";
echo "FEAT_ID = ' . $feat_id . '";
$count++;
}.")";
$stmt = oci_parse($conn, $query);
oci_execute($stmt);
在我的例子中,我想通过郊区,一些关键字,如邮政编码和街道名称,以及特征来搜索属性。为了响应用户对多个功能的选择,我试图使用foreach循环打印"AND FEAT_ID =(张贴id)",但我在"OR"部分之后得到了语法错误,直到查询结束,说一些表达式是预期的。目前我在PHP学习方面还是个新手。谁能给我指出正确的格式吗?干杯(:
我不确定100%你的问题是什么,但我会清理一下。这是我的编码风格,所以其他人可能仍然认为这可以改进。
$sub = trim(ucfirst($_POST['sub']));
$any = trim(ucfirst($_POST['key']));
$count = 0;
$or = "";
if (isset($_POST["check"]))
{
$featArray = [];
foreach ($_POST["check"] as $feat_id)
{
array_push($featArray, "FEAT_ID = " .$feat_id);
}
$or = implode(' AND ', $featArray);
}
$query = "SELECT P.PTY_ID, P.PTY_UNITNUM, P.PTY_STREET, P.PTY_POSTCODE, P.PTY_SUBURB,P.PTY_CITY, T.P_TYPE_NAME,
L.SALE_PRICE, L.AVAILABILITY, R.PTY_ID,F.FEAT_ID, R.FEAT_ID,F.FEAT_NAME
FROM PROPERTY_TYPE T, PROPERTY P, LISTINGS L, PROPERTY_FEATURE R, FEATURE F
WHERE P.P_TYPE_ID = T.P_TYPE_ID(+)
AND P.PTY_ID = L.PTY_ID(+)
AND R.FEAT_ID= F.FEAT_ID
AND R.PTY_ID= P.PTY_ID
AND REGEXP_LIKE (P.PTY_SUBURB, '$sub')
AND REGEXP_LIKE (P.PTY_STREET||P.PTY_POSTCODE, '$any')";
if ($or != null)
$query .= " OR (" . $or . ")";
$stmt = oci_parse($conn, $query);
oci_execute($stmt);
我还会检查你的$_POST['sub']和$_POST['key']或set.
@Lee Stevens谢谢你的主意!你提到的用法完美地解决了我的问题。为了适应我的使用,我将代码修改为:
<?php
$sub = trim(ucfirst($_POST['sub']));
$any = trim(ucfirst($_POST['key']));
$count = 0;
$and = "";
/* All the same above */
if (isset($_POST["check"]))
{
$featArray = [];
foreach ($_POST["check"] as $feat_id)
{
array_push($featArray, "AND F.FEAT_ID = " .$feat_id);
/* Add an "AND" here coz the original codes can't print */
/* the "AND" for some reasons */
}
$and = implode(" ", $featArray);
/* Remove "AND" here */
}
$query = "SELECT P.PTY_ID, P.PTY_UNITNUM, P.PTY_STREET, P.PTY_POSTCODE, P.PTY_SUBURB,P.PTY_CITY, T.P_TYPE_NAME,
L.SALE_PRICE, L.AVAILABILITY, R.PTY_ID,F.FEAT_ID, R.FEAT_ID,F.FEAT_NAME
FROM PROPERTY_TYPE T, PROPERTY P, LISTINGS L, PROPERTY_FEATURE R, FEATURE F
WHERE P.P_TYPE_ID = T.P_TYPE_ID(+)
AND P.PTY_ID = L.PTY_ID(+)
AND R.FEAT_ID= F.FEAT_ID
AND R.PTY_ID= P.PTY_ID
AND REGEXP_LIKE (P.PTY_SUBURB,'$sub')
AND REGEXP_LIKE (P.PTY_STREET||P.PTY_POSTCODE,'$any')";
if (!empty($and))
$query.="$and";
$stmt = oci_parse($conn, $query);
oci_execute($stmt);
?>