0

在我的 php 代码中,我有 2 个循环,它们运行正常,除了 1 个 if 语句,我无法替换以下函数。

(1)虽然这段代码很好并且在第一个循环中运行

if(isset($_GET['Filter']) && !empty($_GET['Filter'])){
    $query = "SELECT * FROM Apartment WHERE ";
    foreach( $_GET['Filter'] as $filter ){
        $query .= "$filter='y' AND ";
    }
    $query = substr($query, 0, -5);
}

while($data = mysql_fetch_array( $result )) {
    //echo $data
}

(2) 这个另一个给出了一个 sql 错误

if(isset($_GET['Filter']) && !empty($_GET['Filter'])){
    $sql = mysql_query("SELECT * FROM Apartment WHERE" );
    foreach( $_GET['Filter'] as $filter ){
        $sql .=("$filter='y' ORDER BY RegularPrice ASC LIMIT 1 AND ");
    }
    $sql = substr($sql, 0, -5);
}

while($row = mysql_fetch_assoc($sql)) {
    //echo $row
}

如果我发布了声明,任何人都可以帮助我在 (2) 秒内找到最终的语法错误吗?

4

2 回答 2

1

摆脱mysql_query(

$sql = mysql_query("SELECT * FROM Apartment WHERE" );

$sql = "SELECT * FROM Apartment WHERE";

因为它在顶部......这是一个执行查询的函数 - 我很确定你还不想这样做。

另外,顺便说一句,在您的示例代码中-两者都没有真正正确执行查询-因此 fetch_assoc 调用不起作用(我假设您只是将它们清理掉。)

干杯

于 2013-08-17T16:10:20.527 回答
1

对于第二个查询,您将部分分配mysql_query()给变量$sql,然后将字符串连接到它。我认为这是一个错误,您只是想将字符串分配给SELECT * FROM Apartment WHERE变量$sql

另外,请注意您要连接的字符串:

$sql = mysql_query("SELECT * FROM Apartment WHERE" );
foreach( $_GET['Filter'] as $filter ){
    $sql .=("$filter='y' ORDER BY RegularPrice ASC LIMIT 1 AND ");
}

这将产生类似的东西:

SELECT * FROM Apartment WHERE filter1='y' ORDER BY RegularPrice ASC LIMIT 1 AND filter2='y' ORDER BY RegularPrice ASC LIMIT 1 AND filter3='y' ORDER BY RegularPrice ASC LIMIT 1 AND

这是一个无效的 SQL 查询。

您想尝试的是:

$sql = "SELECT * FROM Apartment WHERE ";
foreach( $_GET['Filter'] as $filter ){
    $sql .= "$filter='y' AND ";
}
$sql = substr($query, 0, -5); // Remove the last ' AND '
$sql .= " ORDER BY RegularPrice ASC LIMIT 1";

$result = mysql_query ($sql);
于 2013-08-17T16:25:57.813 回答