使用if语句的SQL字符串连接

时间:2016-10-19 08:33:55

标签: php mysql sql

我有简单的全文搜索查询,数据来自HTML表单输入。如果语句检查或者用array_key_exists填充所有三个输入然后连接所有字符串,但如果有人没有填充第一个或第二个输入然后我的查询WHERE部分是WHERE AND contract = $var所以在这种情况下不需要AND。什么是我的问题的解决方案,我如何解决这个问题?当需要AND时,只需添加到查询字符串中,当不需要时不添加。

    $sql = "SELECT 
                slug, 
                title, 
                company, 
                location, 
                email, 
                street, 
                city, 
                phone, 
                url, 
                description, 
                image, 
                created_at 
                FROM jobs
                WHERE ";

    array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : '';
    array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : '';
    array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : '';

2 个答案:

答案 0 :(得分:2)

最简单的解决方案是在原始where语句中添加1(并在第一个AND if语句之前添加$sql。这将永远为真,并将返回所有记录。

如果darbo-laikas存在,则您的查询将为...FROM jobs WHERE 1 AND contract...,这将正常工作。

$sql = "SELECT 
            slug, 
            title, 
            company, 
            location, 
            email, 
            street, 
            city, 
            phone, 
            url, 
            description, 
            image, 
            created_at 
            FROM jobs
            WHERE 1 ";

array_key_exists('paieska', $segment) ? $sql .= "AND MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') " : '';
array_key_exists('darbo-laikas', $segment) ? $sql .= "AND contract = '".$segment['darbo-laikas']."' " : '';
array_key_exists('miestas', $segment) ? $sql .= "AND location = '".$segment['miestas']."'" : '';

答案 1 :(得分:0)

试试这个,在每个最后一个语句中添加' AND'

array_key_exists('paieska', $segment) ? $sql .= "MATCH(title, description) AGAINST('".urldecode($segment['paieska'])."') AND " : '';
array_key_exists('darbo-laikas', $segment) ? $sql .= "contract = '".$segment['darbo-laikas']."' AND " : '';
array_key_exists('miestas', $segment) ? $sql .= "location = '".$segment['miestas']."' AND " : '';
执行前

,使用

删除最后一个字符(' AND')
rtrim($sql, "AND ")

注意: rtrim应该使用空格,因为' AND' 也使用空格