SQL代码在PHP中不起作用,但它在phpmyadmin中起作用

时间:2012-09-19 19:29:59

标签: php mysql phpmyadmin

我有一个可以在表中执行完整查询的数据库。每个用户都有会员身份,尽管并非所有这些状态都是真实会员身份。在此查询中,我必须获得具有真实成员资格状态的所有用户。我也有一个过滤器,用于过滤用户的工作分配,如“PR Manager”。首先,我检查是否有任何过滤器:

if($filter != 0)
{
    $filter = "Assignment NOT LIKE '$filter'";
}
else
{
    $filter = "1";
}

接下来,我搜索所有真实会员值:

$member_ids = "";
while($get = mysql_fetch_array($query))
{
    if($get["IsMember"] == 1)
    {
        $id = $get["ID"];
        if($member_ids == ""){ $member_ids = "'$id'"; } else { $member_ids .= " OR '$id'"; }
    }
}

从这两个生成的参数中,我构建了我的SQL查询:

$query = mysql_query("SELECT * FROM vilma_contact WHERE Membership LIKE $member_ids AND $filter");

输出如下:

SELECT * FROM vilma_contact WHERE Membership LIKE '3' OR '2' AND Assignment NOT LIKE '10'

现在出现问题。它不能在PHP中运行,但是如果我将它复制到phpmyadmin,它会显示没有错误并显示正确的行。我从来没有遇到过这样的事情,如果有人可以提供帮助我真的很感激。

3 个答案:

答案 0 :(得分:1)

SELECT * 
FROM vilma_contact 
WHERE 
    Membership LIKE '3' OR '2' 
    AND Assignment NOT LIKE '10'

看起来好像应该是错误的SQL

SELECT * 
FROM vilma_contact 
WHERE 
    (Membership LIKE '3' OR Membership LIKE '2') AND
    Assignment NOT LIKE '10'

你可能需要使用=所以进一步的改变是

SELECT * 
FROM vilma_contact 
WHERE 
    (Membership = '3' OR Membership = '2') AND
    Assignment != '10';

另外尝试添加“;”最后

答案 1 :(得分:0)

您的WHERE子句的格式错误。通常,当使用LIKE时,字符串中将包含通配符(%_)的组合,以实际指示您要匹配的内容。如果你试图匹配那些确切的字符串,你需要使用相同的,所以可能是这样的:

SELECT *
FROM vilma_contact
WHERE
(Membership = '3' OR Membership = '2') 
AND Assignment <> '10'

如果您真的想要匹配子字符串,那么您的查询可能会像

一样
SELECT *
FROM vilma_contact
WHERE
(Membership LIKE '%3%' OR Membership LIKE '%2%') 
AND Assignment NOT LIKE '%10%'

答案 2 :(得分:0)

我不确定您的代码序列是否正确

$query = mysql_query("SELECT * FROM vilma_contact WHERE Membership LIKE $member_ids AND $filter");

是AFTER

while($get = mysql_fetch_array($query))

错误似乎表明在while之前没有查询。那么也许您可以向我们展示传递给while的查询?

正如我在评论中提到的,您需要修复查询部分Membership LIKE '3' OR '2'